mir*_*opé 1 javascript arrays grouping object
我的数组是这样的:
myArray = [
{date: "2017-01-01", num: "2"}
{date: "2017-01-02", num: "3"}
{date: "2017-02-04", num: "6"}
{date: "2017-02-05", num: "15"}
]
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
myArray = [
{group: "0", data: [
{date: "2017-01-01", num: "2"}
{date: "2017-01-02", num: "3"}]
},
{group: "1", data: [
{date: "2017-02-04", num: "6"}
{date: "2017-02-05", num: "15"}]
},
]
Run Code Online (Sandbox Code Playgroud)
基本上,按月日期键分组。
如果您还没有Lodash (与Underscore JS相同),请将其添加到您的 JS 中,如下所示:
使用 NPM 安装:npm i --save lodash
我将向您展示 Lodash(或 Underscore.js)中的一个漂亮的衬线
const _ = require('lodash');
let myArray = [
{date: "2017-01-01", num: "2"},
{date: "2017-01-02", num: "3"},
{date: "2017-02-04", num: "6"},
{date: "2017-02-05", num: "15"}
]
// The one liner
_.groupBy(myArray, ({date})=> new Date(date).getMonth());
Run Code Online (Sandbox Code Playgroud)
这是回应:
{
"0": [
{
"date": "2017-01-01",
"num": "2"
},
{
"date": "2017-01-02",
"num": "3"
}
],
"1": [
{
"date": "2017-02-04",
"num": "6"
},
{
"date": "2017-02-05",
"num": "15"
}
]
}
Run Code Online (Sandbox Code Playgroud)
使用该溶液Array.prototype.reduce,String.prototype.split与Array.prototype.map功能:
var myArray = [
{date: "2017-01-01", num: "2"},
{date: "2017-01-02", num: "3"},
{date: "2017-02-04", num: "6"},
{date: "2017-02-05", num: "15"}
],
groupKey = 0;
groups = myArray.reduce(function (r, o) {
var m = o.date.split(('-'))[1];
(r[m])? r[m].data.push(o) : r[m] = {group: String(groupKey++), data: [o]};
return r;
}, {});
var result = Object.keys(groups).map(function(k){ return groups[k]; });
console.log(result);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3476 次 |
| 最近记录: |