【发布时间】:2020-01-27 16:46:42
【问题描述】:
我在 javascript 中有一个我想减少的对象数组。请参阅下面的代码。 6 位或更多数字的消息已验证,未验证的消息较少。我按组分组。
const myArray = [
{ group: 'groupA', message: 'Text without a number', sl: '1A' },
{ group: 'groupA', message: 'Text with a number WO5467829', sl: '1A' },
{ group: 'groupB', message: 'Text without a number', sl: '1A' },
{ group: 'groupA', message: 'Text with a number WO5467829', sl: '1A' },
{ group: 'groupB', message: 'Text with a number WO5467829', sl: '1A' },
{ group: 'groupC', message: 'Text without a number', sl: '1B' },
{ group: 'groupD', message: 'Text with a number Tick0127866', sl: '1B' },
{ group: 'groupC', message: 'Text without a number', sl: '1A' }
];
output = myArray.reduce((acc, line) => {
let yes = 0;
let no = 0;
line.message.match(/\d{6,}/) ? yes++ : no++;
acc[line.group] = acc[line.group] || {};
acc[line.group].verified = (acc[line.group].verified || 0) + yes;
acc[line.group].unverified = (acc[line.group].unverified || 0) + no;
return acc;
}, {});
console.log('output', output);
但是我希望输出也是一个对象数组,如下所示:
[
{ group: 'groupA', verified: 2, unverified: 1 },
{ group: 'groupB', verified: 1, unverified: 1 },
{ group: 'groupC', verified: 0, unverified: 2 },
{ group: 'groupD', verified: 1, unverified: 0 }
]
我该怎么做?
【问题讨论】:
-
更改逻辑并使用数组(
myArray.reduce((acc, line) => ..., [])),或者之后使用Object.entries()+.map()转换结果 -
你能提供一些关于你为什么要达到的背景吗?您将已验证和未验证的属性用于/需要什么?
-
感谢大家的快速回答!我将使用输出作为 d3.js 堆叠条形图的输入,其中包含月度数据。
标签: javascript arrays object reduce