這個問題在這里已經有了答案: 如何按鍵對一組物件進行分組? (30 個回答) 3 小時前關閉。
我有一個物件陣列,如下所示:
[
{
"node_name": "node1",
"external": "external_node1",
"status": "online",
"Date": "2022-05-26 08:20:27.022313"
},
{
"node_name": "node2",
"external": "external_node2",
"status": "offline",
"Date": "2022-05-26 20:20:27.022313"
},
{
"node_name": "node3",
"external": "external_node3",
"status": "online",
"Date": "2022-05-26 08:20:27.022313"
},
{
"node_name": "node4",
"external": "external_node4",
"status": "online",
"Date": "2022-05-26 20:20:27.022313"
}
]
使用 JavaScript,我將如何“分組”并將所有具有匹配Date值的物件插入到它自己的陣列中?
例如,node1&node3都具有"2022-05-26 08:20:27.022313"其Date值,以及具有相同值的node2& 。node4Date
Date如果值匹配,我將如何對這些物件進行排序并將它們插入到一個陣列中?
uj5u.com熱心網友回復:
我建議使用Array.reduce()將輸入轉換為所需的形式。
您可以將其包裝在一個groupBy()函式中。這將回傳一個物件,其中包含每個遇到的值的物件陣列。
const input = [ { "node_name": "node1", "external": "external_node1", "status": "online", "Date": "2022-05-26 08:20:27.022313" }, { "node_name": "node2", "external": "external_node2", "status": "offline", "Date": "2022-05-26 20:20:27.022313" }, { "node_name": "node3", "external": "external_node3", "status": "online", "Date": "2022-05-26 08:20:27.022313" }, { "node_name": "node4", "external": "external_node4", "status": "online", "Date": "2022-05-26 20:20:27.022313" } ]
function groupBy(arr, key) {
return arr.reduce((acc, el) => {
acc[el[key]] = [...(acc[el[key]] || []), el];
return acc;
}, {})
}
const result = groupBy(input, 'Date');
console.log('Result:', result)
.as-console-wrapper { max-height: 100% !important; }
uj5u.com熱心網友回復:
您可以使用 sort 和 reduce 的組合來實作它:
const data = [
{
"node_name": "node1",
"external": "external_node1",
"status": "online",
"Date": "2022-05-26 08:20:27.022313"
},
{
"node_name": "node2",
"external": "external_node2",
"status": "offline",
"Date": "2022-05-26 20:20:27.022313"
},
{
"node_name": "node3",
"external": "external_node3",
"status": "online",
"Date": "2022-05-26 08:20:27.022313"
},
{
"node_name": "node4",
"external": "external_node4",
"status": "online",
"Date": "2022-05-26 20:20:27.022313"
}
];
const result = data.sort((a,b) => Date.parse(a.Date) - Date.parse(b.Date)).
reduce((acc, data) => {
const date = data.Date;
acc[date] = acc[date] || [];
acc[date] = [...acc[date], data];
return acc;
}, {})
console.log(result);
uj5u.com熱心網友回復:
使用javascript的.filter()方法。
const newArray = oldArray.filter(data => {
return data.Date == "2022-05-26 08:20:27.022313"
})
這會將所有具有上述日期值的物件 (2022-05-26 08:20:27.022313) 即 node1 和 node3 回傳到不同的陣列中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/483692.html
標籤:javascript 数组 javascript 对象
