[英]Group array of objects by date in javascript
在 javascript 中按日期对对象数组进行分组
有三个这样的对象。
var Object1 = [
{
"data" : "1-1",
"createdAt": "2022-03-01",
},
{
"data" : "1-2",
"createdAt": "2022-03-02",
},
{
"data" : "1-4",
"createdAt": "2022-03-04",
},
{
"data" : "1-5",
"createdAt": "2022-03-05",
},
{
"data" : "1-6",
"createdAt": "2022-03-06",
},
{
"data" : "1-7",
"createdAt": "2022-03-07",
}
];
var Object2 = [
{
"data" : "2-1",
"createdAt": "2022-03-02",
},
{
"data" : "2-2",
"createdAt": "2022-03-03",
},
{
"data" : "2-3",
"createdAt": "2022-03-04",
},
{
"data" : "2-4",
"createdAt": "2022-03-05",
},
{
"data" : "2-5",
"createdAt": "2022-03-06",
},
{
"data" : "2-6",
"createdAt": "2022-03-07",
},
{
"data" : "2-7",
"createdAt": "2022-03-08",
}
];
var Object3 = [
{
"data" : "3-1",
"createdAt": "2022-03-03",
},
{
"data" : "3-2",
"createdAt": "2022-03-04",
},
{
"data" : "3-3",
"createdAt": "2022-03-05",
},
{
"data" : "3-4",
"createdAt": "2022-03-06",
},
{
"data" : "3-5",
"createdAt": "2022-03-07",
},
{
"data" : "3-6",
"createdAt": "2022-03-08",
},
{
"data" : "3-7",
"createdAt": "2022-03-09",
}
];
我想像这样对它们进行分组:
var result = [
{
"Object1" : "1-1",
"Object2" : undefined or null,
"Object3" : undefined or null,
"createdAt": "2022-03-01",
},
{
"Object1" : "1-2",
"Object2" : "2-1",
"Object3" : undefined or null,
"createdAt": "2022-03-02",
},
{
"Object1" : undefined or null,
"Object2" : "2-2",
"Object3" : "3-1",
"createdAt": "2022-03-03",
},
{
"Object1" : "1-4",
"Object2" : "2-3",
"Object3" : "3-2",
"createdAt": "2022-03-04",
},
{
"Object1" : "1-5",
"Object2" : "2-4",
"Object3" : "3-3",
"createdAt": "2022-03-05",
},
{
"Object1" : "1-6",
"Object2" : "2-5",
"Object3" : "3-4",
"createdAt": "2022-03-06",
},
{
"Object1" : "1-7",
"Object2" : "2-6",
"Object3" : "3-5",
"createdAt": "2022-03-07",
},
{
"Object1" : undefined or null,
"Object2" : "2-7",
"Object3" : "3-6",
"createdAt": "2022-03-08",
},
{
"Object1" : undefined or null,
"Object2" : undefined or null,
"Object3" : "3-7",
"createdAt": "2022-03-09",
},
]
我想按日期对 n arrays 进行分组。
但是每个数组里面的日期也会不一样,不知道有没有数据。 中间可能日期是空的,也可能数据是空的。 如果时、分、秒数据混合,则不按日期分组。
我想我可以使用 foreach 循环,但我不知道我错过了什么。 有人知道这个问题的答案吗?
这是一个相当标准的“分组依据”,但由于您有多个 arrays 并且您希望将它们的变量名用作属性,因此您需要一种机制来执行此操作。
下面的示例首先使用速记属性名称从三个 arrays 创建一个 object,然后迭代此 object 的Object.entries()
以按日期分组,通过变量名称作为键分配数据。 为了确保所有对象都具有所有数组属性,即使它们没有相关条目,它也会从组合 object 的Object.keys()
创建一个template
object,并将其传播到分组操作中的每个累加器中。
const Object1 = [{ "data": "1-1", "createdAt": "2022-03-01", }, { "data": "1-2", "createdAt": "2022-03-02", }, { "data": "1-4", "createdAt": "2022-03-04", }, { "data": "1-5", "createdAt": "2022-03-05", }, { "data": "1-6", "createdAt": "2022-03-06", }, { "data": "1-7", "createdAt": "2022-03-07", }]; const Object2 = [{ "data": "2-1", "createdAt": "2022-03-02", }, { "data": "2-2", "createdAt": "2022-03-03", }, { "data": "2-3", "createdAt": "2022-03-04", }, { "data": "2-4", "createdAt": "2022-03-05", }, { "data": "2-5", "createdAt": "2022-03-06", }, { "data": "2-6", "createdAt": "2022-03-07", }, { "data": "2-7", "createdAt": "2022-03-08", }]; const Object3 = [{ "data": "3-1", "createdAt": "2022-03-03", }, { "data": "3-2", "createdAt": "2022-03-04", }, { "data": "3-3", "createdAt": "2022-03-05", }, { "data": "3-4", "createdAt": "2022-03-06", }, { "data": "3-5", "createdAt": "2022-03-07", }, { "data": "3-6", "createdAt": "2022-03-08", }, { "data": "3-7", "createdAt": "2022-03-09", }]; const objects = { Object1, Object2, Object3 }; const template = Object.fromEntries(Object.keys(objects).map(k => [k, undefined])); const grouped = {}; for (const [objGroup, objArr] of Object.entries(objects)) { for (const { createdAt, data } of objArr) { const group = grouped[createdAt]??= {...template, createdAt }; group[objGroup] = data; } } const result = Object.values(grouped); console.log(result);
至于你含糊不清的说法, ‘中间可能日期是空的,也可能是数据是空的。 如果小时、分钟和秒数据混合在一起,则它们不会按日期分组 ' ,没有实际数据就无法添加任何内容,但您需要确定一个稳定的属性才能准确分组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.