如果日期值相同,如何将对象分组到数组中?
How do I group objects into an array, if the Date value is the same?
我有一组对象,如下所示:
[
{
"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,我如何 'group' 并将所有具有匹配 Date
值的对象插入到它自己的数组中?
例如,node1
& node3
都有 "2022-05-26 08:20:27.022313"
作为它的 Date
值,而 node2
& node4
有相同的 Date
值。
如果 Date
值匹配,我如何将这些对象分类并插入到一个数组中?
您可以结合使用排序和归约来实现它:
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);
我建议使用 Array.reduce()
将输入转换为所需的形式。
您可以将其包装在 groupBy()
函数中。这将 return 一个对象,其中包含遇到的每个值的对象数组。
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; }
使用javascript的.filter()
方法。
const newArray = oldArray.filter(data => {
return data.Date == "2022-05-26 08:20:27.022313"
})
这将return 所有具有上述日期值的对象 (2022-05-26 08:20:27.022313) 即 node1 和 node3 到不同的数组中。
我有一组对象,如下所示:
[
{
"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,我如何 'group' 并将所有具有匹配 Date
值的对象插入到它自己的数组中?
例如,node1
& node3
都有 "2022-05-26 08:20:27.022313"
作为它的 Date
值,而 node2
& node4
有相同的 Date
值。
如果 Date
值匹配,我如何将这些对象分类并插入到一个数组中?
您可以结合使用排序和归约来实现它:
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);
我建议使用 Array.reduce()
将输入转换为所需的形式。
您可以将其包装在 groupBy()
函数中。这将 return 一个对象,其中包含遇到的每个值的对象数组。
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; }
使用javascript的.filter()
方法。
const newArray = oldArray.filter(data => {
return data.Date == "2022-05-26 08:20:27.022313"
})
这将return 所有具有上述日期值的对象 (2022-05-26 08:20:27.022313) 即 node1 和 node3 到不同的数组中。