js group objects in an array
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://atendesigngroup.com/blog/array-map-filter-and-reduce-js
solution ??? sort & reduce
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的更多相关文章
- js如何判断一个对象是不是Array?(转载)
js如何判断一个对象是不是Array? 在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? typeof 操作符 对于Function, String, Nu ...
- (三)underscore.js框架Objects类API学习
keys_.keys(object) Retrieve all the names of the object's properties. _.keys({one: 1, two: 2, three ...
- js如何判断一个对象是不是Array?
在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? typeof 操作符 对于Function, String, Number ,Undefined 等几种类 ...
- js如何判断数组是Array类型
在说明如何判断一个对象为数组类型前,我们先巩固下js的数据类型,js一共有六大数据类型:number.string.object.Boolean.null.undefined.var str=&quo ...
- js中常用的对象—Array的属性和方法
今天说一下,js中常用的内置对象——Array对象 Array常用属性: length prototype :给系统对象添加属性和方法 Array常用方法: Array.prototype.sum = ...
- js中的arguments、Array.prototype.slice.call()
类数组对象:arguments js把传入到这个函数的全部参数存储在arguments里面,其实arguments也是个对象,而且是一个特殊的对象,它的属性名是按照传入参数的序列来的,第1个参数的属性 ...
- js如何判断一个对象是不是Array? 三种方法总有一种可以帮上忙
转载:http://www.nowamagic.net/librarys/veda/detail/1250 在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? ...
- js如何判断一个对象是不是Array
typeof 操作符 对于Function, String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时 var arr=new Array(&quo ...
- js 数组详解(javascript array)
Array Array 对象用于在单个的变量中存储多个值. 构造函数: 1) new Array(); 2) new Array(size); 3) new Array(element0, ...
随机推荐
- Coded UI
Coded UI Test是Visual Studio 2010对于Testing Project(测试工程)提供的关于UI自动化测试的框架,支持Win32,Web,WPF等UI的自动化测试,是一个非 ...
- linux:nginx
nginx介绍 一个高性能的http服务器/反向代理服务器及电子邮件代理服务器 nginx 大致有三大功能(静态web服务器.反向代理.负载均衡) nginx一般同时做为静态web服务器和反向代理服务 ...
- 八:SpringBoot-集成JPA持久层框架,简化数据库操作
SpringBoot-集成JPA持久层框架,简化数据库操作 1.JPA框架简介 1.1 JPA与Hibernate的关系: 2.SpringBoot整合JPA Spring Data JPA概述: S ...
- 设计模式(十五)——命令模式(Spring框架的JdbcTemplate源码分析)
1 智能生活项目需求 看一个具体的需求 1) 我们买了一套智能家电,有照明灯.风扇.冰箱.洗衣机,我们只要在手机上安装 app 就可以控制对这些家电工作. 2) 这些智能家电来自不同的厂家,我们不想针 ...
- UDP发送文件
接收端 package com.zy.demo2; import java.io.File; import java.io.FileOutputStream; import java.net.Data ...
- F - Team Queue
有n个队伍. 对于每个ENQUEUE x 命令. 如果x所在的队伍已经在队列中, 则x排在队列中它的队伍的尾巴, 否则排在队列的末尾. 可以理解为队列中的队列的味道. Queues and Prio ...
- hdu 4738 Caocao's Bridges(割边)
题目链接 用tarjan求桥上的最小权值 #include<bits/stdc++.h> #define ll long long int using namespace std; inl ...
- Codeforces Round #625 (Div. 2, based on Technocup 2020 Final Round) B. Journey Planning(映射)
题意: 已知 n 所城市(从 1 至 n 编号)及其美丽值,选取一条旅行路线,满足路线中两两城市美丽值之差等于编号之差,求所有旅行路线中美丽值的最大值. 思路: 美丽值与编号作差,差值为键,映射累加 ...
- Codeforces Round #648 (Div. 2) F. Swaps Again
题目链接:F.Swaps Again 题意: 有两个长度为n的数组a和数组b,可以选择k(1<=k<=n/2)交换某一个数组的前缀k和后缀k,可以交换任意次数,看最后是否能使两个数组相等 ...
- Codeforces Global Round 9 B. Neighbor Grid (构造,贪心)
题意:给一个\(n\)X\(m\)的矩阵,矩阵中某个数字\(k\)表示其四周恰好有\(k\)个不为0的数字,你可以使任意位置上的数字变大,如果操作后满足条件,输出新矩阵,否则输出NO. 题解:贪心,既 ...