js & sort array object

sort array object in js

https://flaviocopes.com/how-to-sort-array-of-objects-by-property-javascript/

  1. let msgs = [
  2. {
  3. "senderUid": "6845484",
  4. "receiverUid": "6845481",
  5. "serialNum": "A 1564737163253",
  6. "msgId": 606896983568064500,
  7. "text": "xxxxx",
  8. "time": "17:11",
  9. "count": 1,
  10. "isSelf": true
  11. },
  12. {
  13. "senderUid": "6845484",
  14. "receiverUid": "6845481",
  15. "serialNum": "A 1564737283216",
  16. "msgId": 606897486704189400,
  17. "text": "zzzz",
  18. "time": "17:13",
  19. "count": 2,
  20. "isSelf": true
  21. },
  22. {
  23. "senderUid": "6845481",
  24. "receiverUid": "6845484",
  25. "serialNum": "C 1564735983212",
  26. "msgId": 606892034444533800,
  27. "text": "C 文本消息 text 3",
  28. "time": "16:52",
  29. "count": 3
  30. },
  31. {
  32. "senderUid": "6845481",
  33. "receiverUid": "6845484",
  34. "serialNum": "C 1564735426174",
  35. "msgId": 606889698041045000,
  36. "text": "C 文本消息 text 2",
  37. "time": "16:42",
  38. "count": 3
  39. },
  40. {
  41. "senderUid": "6845481",
  42. "receiverUid": "6845484",
  43. "serialNum": "C 1564730001766",
  44. "msgId": 606866947376980000,
  45. "text": "C 文本消息 text 1",
  46. "time": "15:12",
  47. "count": 3
  48. },
  49. ];
  50. let log = console.log;
  51. // time format & msgId
  52. log(`msgs =`, JSON.stringify(msgs, null, 4));
  53. // 1. sort by id
  54. msgs.sort((a, b) => (a.msgId > b.msgId) ? 1 : -1);
  55. log(`msgs =`, JSON.stringify(msgs, null, 4));
  56. // 2. group time
  57. ???

demo

https://repl.it/@xgqfrms/date-format-and-5-minutes

https://date-format-and-5-minutes.xgqfrms.repl.run/


  1. let msgs = [
  2. {
  3. "senderUid": "6845481",
  4. "receiverUid": "6845484",
  5. "serialNum": "C 1564735983212",
  6. "msgId": 606892034444533800,
  7. "text": "C 文本消息 text 3",
  8. "time": "16:52",
  9. "count": 3
  10. },
  11. {
  12. "senderUid": "6845481",
  13. "receiverUid": "6845484",
  14. "serialNum": "C 1564735426174",
  15. "msgId": 606889698041045000,
  16. "text": "C 文本消息 text 2",
  17. "time": "16:42",
  18. "count": 3
  19. },
  20. {
  21. "senderUid": "6845481",
  22. "receiverUid": "6845484",
  23. "serialNum": "C 1564730001766",
  24. "msgId": 606866947376980000,
  25. "text": "C 文本消息 text 1",
  26. "time": "15:12",
  27. "count": 3
  28. },
  29. {
  30. "senderUid": "6845484",
  31. "receiverUid": "6845481",
  32. "serialNum": "A 1564737163253",
  33. "msgId": 606896983568064500,
  34. "text": "xxxxx",
  35. "time": "17:11",
  36. "count": 1,
  37. "isSelf": true
  38. },
  39. {
  40. "senderUid": "6845484",
  41. "receiverUid": "6845481",
  42. "serialNum": "A 1564737283216",
  43. "msgId": 606897486704189400,
  44. "text": "zzzz",
  45. "time": "17:13",
  46. "count": 2,
  47. "isSelf": true
  48. }
  49. ];
  50. let log = console.log;
  51. // time format & msgId
  52. // log(`msgs =`, JSON.stringify(msgs, null, 4));
  53. // 1. sort by id
  54. // 2. group time
  55. const list = [
  56. {
  57. color: 'white',
  58. size: 'XXL',
  59. num: 3,
  60. },
  61. {
  62. color: 'red',
  63. size: 'XL',
  64. num: 1,
  65. },
  66. {
  67. color: 'black',
  68. size: 'M',
  69. num: 7,
  70. }
  71. ];
  72. log(`msgs =`, JSON.stringify(list, null, 4));
  73. list.sort((a, b) => (a.num > b.num) ? 1 : -1);
  74. log(`new msgs =`, JSON.stringify(list, null, 4));



js date string to timestamp

https://www.toptal.com/software/definitive-guide-to-datetime-manipulation

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

https://stackoverflow.com/questions/18634087/how-to-convert-a-string-to-a-unix-timestamp-in-javascript



bug

OK


  1. // timestamp
  2. let t1 = new Date().getTime();
  3. let t11 = Date.parse('2019/08/02 18:54');
  4. let t2 = new Date("16:52");
  5. log(`t1 =`, t1);
  6. log(`t11 =`, t11);
  7. log(`t2 =`, t2);

seconds

autoGetToday

  1. const autoGetToday = (time = ``, debug = false) => {
  2. let log = console.log;
  3. let date = new Date();
  4. let year = date.getFullYear();
  5. let month = date.getMonth() + 1;
  6. let day = date.getDate();
  7. if (debug) {
  8. log(year);
  9. log(month);
  10. log(day);
  11. }
  12. let today = `${year}/${month}/${day} ${time}`;
  13. if (debug) {
  14. log(`today =`, today);
  15. }
  16. return today;
  17. };
  18. autoGetToday(`19:20`, true);

five minutes


  1. let nowTime = Date.now();
  2. console.log(`nowTime =`, nowTime);
  3. let nowTime1 = Date.parse(`2019/08/02 17:18`);
  4. console.log(`nowTime1 =`, nowTime1);
  5. let nowTime2 = Date.parse(`2019/08/02 17:13`);
  6. console.log(`nowTime2 =`, nowTime2);
  7. let five = nowTime1 - nowTime2;
  8. console.log(`five =`, five);


  1. // mm, ss, ms
  2. const fiveMinutes = 5 * 60 * 1000;

OK


  1. let msgs = [
  2. {
  3. "senderUid": "6845484",
  4. "receiverUid": "6845481",
  5. "serialNum": "A 1564737163253",
  6. "msgId": 606896983568064500,
  7. "text": "B",
  8. "time": "2019/08/02 17:11",
  9. "count": 1,
  10. "isSelf": true
  11. },
  12. {
  13. "senderUid": "6845484",
  14. "receiverUid": "6845481",
  15. "serialNum": "A 1564737283216",
  16. "msgId": 606897486704189400,
  17. "text": "A",
  18. "time": "2019/08/02 17:13",
  19. "count": 2,
  20. "isSelf": true
  21. },
  22. {
  23. "senderUid": "6845481",
  24. "receiverUid": "6845484",
  25. "serialNum": "C 1564735983212",
  26. "msgId": 606892034444533800,
  27. "text": "C",
  28. "time": "2019/08/02 16:52",
  29. "count": 3
  30. },
  31. {
  32. "senderUid": "6845481",
  33. "receiverUid": "6845484",
  34. "serialNum": "C 1564735426174",
  35. "msgId": 606889698041045000,
  36. "text": "D",
  37. "time": "2019/08/02 16:42",
  38. "count": 3
  39. },
  40. {
  41. "senderUid": "6845481",
  42. "receiverUid": "6845484",
  43. "serialNum": "C 1564730001766",
  44. "msgId": 606866947376980000,
  45. "text": "E",
  46. "time": "2019/08/02 15:12",
  47. "count": 3
  48. },
  49. {
  50. "senderUid": "6845481",
  51. "receiverUid": "6845484",
  52. "serialNum": "C 1564730001766",
  53. "msgId": 606866947376970000,
  54. "text": "G",
  55. "time": "2019/08/01 5:12",
  56. "count": 3
  57. },
  58. {
  59. "senderUid": "6845481",
  60. "receiverUid": "6845484",
  61. "serialNum": "C 1564730001766",
  62. "msgId": 606866947376910000,
  63. "text": "F",
  64. "time": "2019/08/01 15:12",
  65. "count": 3
  66. },
  67. ];
  68. let log = console.log;
  69. // time format & msgId
  70. // log(`msgs =`, JSON.stringify(msgs, null, 4));
  71. // 1. sort by id
  72. // asc & ascending
  73. // msgs.sort((a, b) => (a.msgId > b.msgId) ? 1 : -1);
  74. // desc & descending
  75. msgs.sort((a, b) => (a.msgId < b.msgId) ? 1 : -1);
  76. // log(`msgs =`, JSON.stringify(msgs, null, 4));
  77. // 2. group time
  78. // TODO & groups
  79. let nowTime = Date.now();
  80. // log(`nowTime =`, nowTime);
  81. // mm, ss, ms
  82. const fiveMinutes = 5 * 60 * 1000;
  83. let DB = {};
  84. let len = msgs.length;
  85. let groupFlag = ``;
  86. if (msgs[0]) {
  87. groupFlag = Date.parse(msgs[0].time);
  88. }
  89. let cp_msgs = msgs;
  90. let finished = false;
  91. // group flag
  92. for (let i = 0; i < len; i++) {
  93. // filter
  94. let new_cp_msgs = cp_msgs.filter(
  95. (obj, k) => {
  96. let {
  97. time,
  98. } = obj;
  99. if (time.includes(`/`)) {
  100. time = Date.parse(time);
  101. } else {
  102. let today = autoGetToday(time);
  103. time = Date.parse(today);
  104. }
  105. let min = Math.abs(groupFlag - time);
  106. if (min <= fiveMinutes) {
  107. // DB[i].push(obj);
  108. } else {
  109. return obj;
  110. }
  111. }
  112. );
  113. if (cp_msgs.length <= 1 && finished) {
  114. break;
  115. } else {
  116. DB[i] = [];
  117. }
  118. // if (cp_msgs.length <= 1) {
  119. // break;
  120. // }
  121. log(`cp_msgs =`, cp_msgs);
  122. for (let j = 0; j < cp_msgs.length; j++) {
  123. if (cp_msgs.length === 1) {
  124. finished = true;
  125. }
  126. let obj = cp_msgs[j];
  127. let {
  128. time,
  129. } = obj;
  130. if (time.includes(`/`)) {
  131. time = Date.parse(time);
  132. } else {
  133. let today = autoGetToday(time);
  134. time = Date.parse(today);
  135. }
  136. let min = Math.abs(groupFlag - time);
  137. if (min <= fiveMinutes) {
  138. DB[i].push(obj);
  139. } else {
  140. groupFlag = time;
  141. cp_msgs = new_cp_msgs;
  142. break;
  143. }
  144. }
  145. }
  146. const autoGetToday = (time = ``, debug = false) => {
  147. let log = console.log;
  148. let date = new Date();
  149. let year = date.getFullYear();
  150. let month = date.getMonth() + 1;
  151. let day = date.getDate();
  152. if (debug) {
  153. log(year);
  154. log(month);
  155. log(day);
  156. }
  157. let today = `${year}/${month}/${day} ${time}`;
  158. if (debug) {
  159. log(`today =`, today);
  160. }
  161. return today;
  162. };
  163. console.log(`DB groups =`, JSON.stringify(DB, null, 4));


xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


js & sort array object的更多相关文章

  1. JS 深度拷贝 Object Array

    JS 深度拷贝 Object Array function cloneObj(o) { var isArray = o instanceof Array; var isObject = o insta ...

  2. [JS高程]引用类型(Object、Array)

    引用类型:Object.Array Object: person.name   =>推荐,除非必须使用变量([])来表示 person["name"] 区别:[]可以通过变量 ...

  3. JS对Array进行自定制排序

    JS对Array进行自定制排序,简单的做一个记录,代码如下所示: //Test function function myFunction(){ var myArr = new Array(); var ...

  4. JS数组array常用方法

    JS数组array常用方法 1.检测数组 1)检测对象是否为数组,使用instanceof 操作符 if(value instanceof Array) { //对数组执行某些操作 } 2)获取对象的 ...

  5. js sort map by key

    js sort map by key Map map to array // Array.from() Object let obj = {}; for(let key of Object.keys( ...

  6. JS中Array数组的三大属性用法

    原文:JS中Array数组的三大属性用法 Array数组主要有3大属性,它们分别是length属性.prototype属性和constructor属性. JS操作Array数组的方法及属性 本文总结了 ...

  7. LeetCode 905. Sort Array By Parity

    905. Sort Array By Parity Given an array A of non-negative integers, return an array consisting of a ...

  8. python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)

    一.MongoDB初识 什么是MongoDB MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介 ...

  9. js create Array ways All In One

    js create Array ways All In One ES6 const arr = [...document.querySelectorAll(`[data-dom="^div& ...

随机推荐

  1. 慕课网金职位 Python工程师 百度网盘下载

    百度网盘链接:https://pan.baidu.com/s/1xshLRO3ru0LAsQQ0pE67Qg 提取码:bh9f 如果失效加我微信:610060008[视频不加密,资料代码齐全,超清一手 ...

  2. 关于js中each()使用return不能终止循环

    Jquery的each里面用return false代替break:return ture代替continue $(xx).each(function() { if(xx){ return false ...

  3. redis性能优化、内存分析及优化

    redis性能优化.内存分析及优化 1.优化网络延时 2.警惕执行时间长的操作 3.优化数据结构.使用正确的算法 4.考虑操作系统和硬件是否影响性能 5.考虑持久化带来的开销 5.1 RDB 全量持久 ...

  4. JavaWeb——EL及JSTL学习总结

    什么是EL表达式 为什么需要EL EL的主要作用 EL的语法 EL的开发步骤 EL实例练习 EL中的运算符 EL表达式显示内容的特点 EL的特点 EL隐式对象 EL隐式对象介绍 隐式对象实例练习 什么 ...

  5. 希尔伯特曲线python3实现

    需要OpenGL库:https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopengl #coding:utf-8 from OpenGL.GL import * ...

  6. CVE-2018-4407(IOS缓冲区溢出漏洞)exp

    CVE-2018-4407为ios缓冲区溢出漏洞 exp: import scapyfrom scapy.all import * send(IP(dst="同一局域网内目标Ip" ...

  7. 从零搭建一个IdentityServer——聊聊Asp.net core中的身份验证与授权

    OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ...

  8. JVM之堆参数

    1.Java 7和Java 8区别 Java 7堆结构 JDK 1.8之后将最初的永久代取消了,由元空间取代. 在Java8中,永久代已经被移除,被一个称为元空间的区域所取代.元空间的本质和永久代类似 ...

  9. UDP实现多人聊天

    发送端 package com.zy.exercise; import java.net.DatagramPacket; import java.net.DatagramSocket; import ...

  10. Educational Codeforces Round 86 (Div. 2)

    比赛链接:https://codeforces.com/contest/1342 A - Road To Zero 题意 有两个非负整数 x, y 以及两种操作: 支付 a 点代价使其中一个数加一或减 ...