在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 個陣列進行分組。
但是每個陣列中的日期也會不同,有沒有資料就不清楚了。中間可能日期為空,也可能資料為空。如果小時、分鐘和秒資料混合在一起,則它們不會按日期分組。
我想我可以使用 foreach 回圈,但我不知道我錯過了什么。有人知道這個問題的答案嗎?
uj5u.com熱心網友回復:
這是一個相當標準的“分組依據”,但由于您有多個陣列并且您想使用它們的變數名稱作為屬性,您需要一種機制來執行此操作。
下面的示例首先使用速記屬性名稱從三個陣列創建一個物件,然后迭代Object.entries()該物件的 以按日期分組,按變數名稱分配資料作為鍵。為了確保所有物件都具有所有陣列屬性,即使它們沒有相關條目,它也會template從Object.keys()您的組合物件中創建一個物件,并將其傳播到 group-by 操作中的每個累加器中。
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);
至于你那含糊的說法,‘中間的日期可能是空的,也可能是資料是空的。如果小時、分鐘和秒資料混合在一起,它們不按日期分組,沒有實際資料就沒有什么可以添加的,但是您需要確定一個穩定的屬性才能準確分組。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/463328.html
標籤:javascript 算法
