js group objects in an array

js group objects in an array

var groupBy = function(xs, key) {
return xs.reduce(function(rv, x) {
(rv[x[key]] = rv[x[key]] || []).push(x);
return rv;
}, {});
};

https://www.consolelog.io/group-by-in-javascript/

https://stackoverflow.com/questions/14446511/most-efficient-method-to-groupby-on-an-array-of-objects

https://codereview.stackexchange.com/questions/37028/grouping-elements-in-array-by-multiple-properties



https://atendesigngroup.com/blog/array-map-filter-and-reduce-js



solution ??? sort & reduce

https://stackoverflow.com/questions/57355613/javascript-group-on-an-array-of-objects-with-timestamp-range-difference#



https://repl.it/@xgqfrms/grouping-objects-in-array-by-timestamp


/**
* @authr xgqfrms
* @ description grouping-objects-in-array-by-timestamp
*/ let log = console.log; const datas = [
{ msgId: 606896983568064500, text: "B", time: "2019/08/02 17:11", isSelf: true },
{ msgId: 606897486704189400, text: "A", time: "2019/08/02 17:13", isSelf: true },
{ msgId: 606892034444533700, text: "C", time: "2019/08/02 16:52", isSelf: false },
{ msgId: 606889698041045000, text: "D", time: "2019/08/02 16:42", isSelf: false },
{ msgId: 606866947376980000, text: "E", time: "2019/08/02 15:12", isSelf: false },
{ msgId: 606866947376970000, text: "G", time: "2019/08/01 5:12", isSelf: false },
{ msgId: 606866947376910000, text: "F", time: "2019/08/01 15:12", isSelf: false },
]; log(`src datas =`, JSON.stringify(datas, null, 4)); // m. s, ms
const fiveMinutes = 5 * 60 * 1000; let result = datas
// timestamp
// asc
.sort((a, b) => new Date(a.time) - new Date(b.time))
.reduce((arr, obj, i, {[i - 1]: last}) => {
if (!last || new Date(obj.time) - new Date(last.time) > fiveMinutes) {
arr.push([obj]);
} else {
arr[arr.length - 1].push(obj);
}
return arr;
}, []); log(`result =`, JSON.stringify(result, null, 4));

OK

[
[
{
"msgId": 606866947376970000,
"text": "G",
"time": "2019/08/01 5:12",
"isSelf": false
}
],
[
{
"msgId": 606866947376910000,
"text": "F",
"time": "2019/08/01 15:12",
"isSelf": false
}
],
[
{
"msgId": 606866947376980000,
"text": "E",
"time": "2019/08/02 15:12",
"isSelf": false
}
],
[
{
"msgId": 606889698041045000,
"text": "D",
"time": "2019/08/02 16:42",
"isSelf": false
}
],
[
{
"msgId": 606892034444533800,
"text": "C",
"time": "2019/08/02 16:52",
"isSelf": false
}
],
[
{
"msgId": 606896983568064500,
"text": "B",
"time": "2019/08/02 17:11",
"isSelf": true
},
{
"msgId": 606897486704189400,
"text": "A",
"time": "2019/08/02 17:13",
"isSelf": true
}
]
]

bug

https://repl.it/@xgqfrms/timestamp-group-bug







xgqfrms 2012-2020

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


js group objects in an array的更多相关文章

  1. js如何判断一个对象是不是Array?(转载)

    js如何判断一个对象是不是Array? 在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? typeof 操作符 对于Function, String, Nu ...

  2. (三)underscore.js框架Objects类API学习

    keys_.keys(object)  Retrieve all the names of the object's properties. _.keys({one: 1, two: 2, three ...

  3. js如何判断一个对象是不是Array?

    在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? typeof 操作符 对于Function, String, Number ,Undefined 等几种类 ...

  4. js如何判断数组是Array类型

    在说明如何判断一个对象为数组类型前,我们先巩固下js的数据类型,js一共有六大数据类型:number.string.object.Boolean.null.undefined.var str=&quo ...

  5. js中常用的对象—Array的属性和方法

    今天说一下,js中常用的内置对象——Array对象 Array常用属性: length prototype :给系统对象添加属性和方法 Array常用方法: Array.prototype.sum = ...

  6. js中的arguments、Array.prototype.slice.call()

    类数组对象:arguments js把传入到这个函数的全部参数存储在arguments里面,其实arguments也是个对象,而且是一个特殊的对象,它的属性名是按照传入参数的序列来的,第1个参数的属性 ...

  7. js如何判断一个对象是不是Array? 三种方法总有一种可以帮上忙

    转载:http://www.nowamagic.net/librarys/veda/detail/1250 在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? ...

  8. js如何判断一个对象是不是Array

    typeof 操作符 对于Function, String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时 var arr=new Array(&quo ...

  9. js 数组详解(javascript array)

    Array Array 对象用于在单个的变量中存储多个值. 构造函数: 1)   new Array(); 2)   new Array(size); 3)   new Array(element0, ...

随机推荐

  1. WPF入门学习(转)

    WPF基础知识 总结的学习WPF的几点基础知识: 1) C#基础语法知识(或者其他.NET支持的语言):这个是当然的了,虽然WPF是XAML配置的,但是总还是要写代码的,相信各位读者应该也都有这个基础 ...

  2. 20201104gryz模拟赛解题报告

    写在前面 \(Luckyblock\) 良心出题人, 题面好评 T1还是蛮简单的,用一个栈来维护就能过(某天听说 \(Luckyblock\) 出了套题,T1是个考栈的,看来就是这道了 注:栈的清空只 ...

  3. ScalikeJDBC,操作mysql数据,API

    ScalikeJDBC,操作mysql数据,API 一.构建maven项目,添加pom.xml依赖 二.resource文件下创建application.conf文件,并配置以下内容 三.操作mysq ...

  4. windows提权常用系统漏洞与补丁编号速查对照表

    #Security Bulletin #KB #Description #Operating System CVE-2020-0787 [Windows Background Intelligent ...

  5. 弱网测试之Fidder

    是用Fidder可以模拟若罔测试. 1.Fiider设置 fiddler中选中Rules->Cutomize Rules,在文件中搜索关键字:m_SimulateModem: 修改m_Simul ...

  6. linux(5)查看历史命令执行记录history

    前言 我们每次敲打linux命令的时候,有时候想用之前用过的命令,一般情况下,我们都会按↑↓箭头来寻找历史的命令记录,那如果我想用1天前执行的某条命令,难道还要按↑100次?显示这样是不现实的,我们可 ...

  7. python实现经典排序算法

    以下排序算法最终结果都默认为升序排列,实现简单,没有考虑特殊情况,实现仅表达了算法的基本思想. 冒泡排序 内层循环中相邻的元素被依次比较,内层循环第一次结束后会将最大的元素移到序列最右边,第二次结束后 ...

  8. HDU - 2066 最短路+加一个节点

    一个图上,有M条边,Z个出发点,Y个终止点.求一条最短路,其中起点是Z中的任意一点,终点是Y中任意一点. Input 输入数据有多组,输入直到文件结束. 每组的第一行是三个整数M,Z,Y 接着有M行, ...

  9. MySQL 启动流程及配置管理

    目录 MySQL 启动关闭流程 启动数据库 关闭数据库 MySQL 配置管理 预编译阶段 配置文件 命令行 MySQL 配置文件 配置文件的位置和优先级 配置文件的优先级测试 配置文件的生效顺序 配置 ...

  10. kubernetes跑jenkins动态slave

    使用jenkins动态slave的优势: 服务高可用,当 Jenkins Master 出现故障时,Kubernetes 会自动创建一个新的 Jenkins Master 容器,并且将 Volume ...