我有一个建议:
var modbusData = [
{ Type: "rtu", IdDevice: "1", Time: "11:01:00", Data: "1,12,23" },
{ Type: "tcp", IdDevice: "2", Time: "11:01:11", Data: "30,40,50" },
{ Type: "rtu", IdDevice: "1", Time: "11:02:00", Data: "5,10,21" },
{ Type: "tcp", IdDevice: "2", Time: "11:02:11", Data: "32,44,53" },
];我打电话后:
function groupBy(objectArray, property) {
return objectArray.reduce(function (acc, obj) {
let key = obj[property]
if (!acc[key]) {
acc[key] = []
}
acc[key].push(obj)
return acc
}, {})
}
let groupedData = groupBy(modbusData, 'Type')
console.log(groupedData)其结果将是:
{
rtu: [
{ Type: 'rtu', IdDevice: '1', Time: '11:01:00', Data: '1,12,23' },
{ Type: 'rtu', IdDevice: '1', Time: '11:02:00', Data: '5,10,21' }
],
tcp: [
{ Type: 'tcp', IdDevice: '2', Time: '11:01:11', Data: '30,40,50' },
{ Type: 'tcp', IdDevice: '2', Time: '11:02:11', Data: '32,44,53' }
]
}现在我希望在modbusData中没有“类型”:"rtu“或"tcp”时,结果将返回一个空数组,如下所示:
{
rtu: [
{ Type: 'rtu', IdDevice: '1', Time: '11:01:00', Data: '1,12,23' },
{ Type: 'rtu', IdDevice: '1', Time: '11:02:00', Data: '5,10,21' }
],
tcp: []
}发布于 2021-06-16 13:53:33
您需要将预期的组键作为还原器的初级对象传递。
>>> [ 'rtu', 'tcp' ]<<< Object.fromEntries(expectedGroups.map(k => [k, []])) // { rtu: [], tcp: [] }
var modbusData = [
{ Type: "rtu", IdDevice: "1", Time: "11:01:00", Data: "1,12,23" },
{ Type: "rtu", IdDevice: "1", Time: "11:02:00", Data: "5,10,21" }
];
function groupBy(objectArray, property, expectedGroups = []) {
return objectArray.reduce(function (acc, obj) {
let key = obj[property]
if (!acc[key]) {
acc[key] = []
}
acc[key].push(obj)
return acc
}, Object.fromEntries(expectedGroups.map(k => [k, []])))
};
let groupedData = groupBy(modbusData, 'Type', [ 'rtu', 'tcp' ]);
console.log(groupedData);.as-console-wrapper { top: 0; max-height: 100% !important; }
这里有一个更精简的版本,它使用ES5/6构造。
const modbusData = [
{ Type: "rtu", IdDevice: "1", Time: "11:01:00", Data: "1,12,23" },
{ Type: "rtu", IdDevice: "1", Time: "11:02:00", Data: "5,10,21" }
];
const groupBy = (arr, prop, requiredKeys = []) =>
arr.reduce((acc, obj) =>
({ ...acc,
[obj[prop]]: [...(acc[obj[prop]] ?? []), obj]
}), Object.fromEntries(requiredKeys.map(k => [k, []])));
const groupedData = groupBy(modbusData, 'Type', [ 'rtu', 'tcp' ]);
console.log(groupedData);.as-console-wrapper { top: 0; max-height: 100% !important; }
发布于 2021-06-16 13:51:10
尝试使用扩展运算符合并alltypes
let alltypes = { rtu: [], tcp: [] }
let result = {...alltypes, ...groupedData}
var modbusData = [
{ Type: "rtu", IdDevice: "1", Time: "11:01:00", Data: "1,12,23" },
{ Type: "rtu", IdDevice: "1", Time: "11:02:00", Data: "5,10,21" },
];
function groupBy(objectArray, property) {
return objectArray.reduce(function (acc, obj) {
let key = obj[property]
if (!acc[key]) {
acc[key] = []
}
acc[key].push(obj)
return acc
}, {})
}
let groupedData = groupBy(modbusData, 'Type')
let alltypes = { rtu: [], tcp: [] }
let result = {...alltypes, ...groupedData}
console.log(result)
https://stackoverflow.com/questions/68003879
复制相似问题