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, ...
随机推荐
- (转载)微软数据挖掘算法:Microsoft 关联规则分析算法(7)
前言 本篇继续我们的微软挖掘算法系列总结,前几篇我们分别介绍了:微软数据挖掘算法:Microsoft 决策树分析算法(1).微软数据挖掘算法:Microsoft 聚类分析算法(2).微软数据挖掘算法: ...
- Group by 优化
一个标准的 Group by 语句包含排序.分组.聚合函数,比如 select a,count(*) from t group by a ; 这个语句默认使用 a 进行排序.如果 a 列没有索引,那 ...
- Elasticsearch--ES-Head--docker版安装
1.0ElasticSearch安装 # 拉取ES镜像docker pull elasticsearch:6.5.0 # 设置vm.max_map_count大小sysctl -w vm.max_ma ...
- (十五)整合 Drools规则引擎,实现高效的业务规则
整合 Drools规则引擎,实现高效的业务规则 1.Drools引擎简介 1.1 规则语法 2.SpringBoot整合Drools 2.1 项目结构 2.2 核心依赖 2.3 配置文件 3.演示案例 ...
- Jenkins安装部署项目
Jenkins安装部署项目 配置JDK git maven 部署到服务器 一.新建任务 二.配置jenkins 三.添加构建信息 四.应用.保存 五.踩坑填坑记录 5.1没有jar包的情况 5.2无法 ...
- 在.NetCore(C#)中使用ODP.NET Core+Dapper操作Oracle数据库
前言 虽然一直在说"去IOE化",但是在国企和政府,Oracle的历史包袱实在太重了,甚至很多业务逻辑都是写在Oracle的各种存储过程里面实现的-- 我们的系统主要的技术栈是Dj ...
- CSS奇思妙想 -- 使用 background 创造各种美妙的背景
本文属于 CSS 绘图技巧其中一篇,系列文章: 在 CSS 中使用三角函数绘制曲线图形及展示动画 CSS奇思妙想 -- 使用 CSS 创造艺术 将介绍一些利用 CSS 中的 background.mi ...
- Codeforces Global Round 7 D1. Prefix-Suffix Palindrome (Easy version)(字符串)
题意: 取一字符串不相交的前缀和后缀(可为空)构成最长回文串. 思路: 先从两边取对称的前后缀,之后再取余下字符串较长的回文前缀或后缀. #include <bits/stdc++.h> ...
- SPOJ1812 LCS2 - Longest Common Substring II【SAM LCS】
LCS2 - Longest Common Substring II 多个字符串找最长公共子串 以其中一个串建\(SAM\),然后用其他串一个个去匹配,每次的匹配方式和两个串找\(LCS\)一样,就是 ...
- 【noi 2.6_2421】Exchange Rates(DP)
题意:起始有1000元美元,给出N天美元与加拿大元的汇率.问N天内可以不停的兑换,每次兑换需要收取3%的手续费,问可以得到的最大的美元数. 解法:直接用2个变量存第 i 天时手中是美元和加拿大元的最大 ...