我有一个要减少的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 }
]
我该怎么做?
使用数组作为累加器的初始值,并在内部.reduce
使用findIndex
,检查当前组(如果找到),更新verified
和unverified
值,否则,插入一个新的:
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++;
// check if you have the group in the accumulator
const ndx = acc.findIndex(e => e.group === line.group);
// if you have it, manipulate verified and unverified
if (ndx > -1) {
acc[ndx].verified = (acc[ndx].verified || 0) + yes;
acc[ndx].unverified = (acc[ndx].unverified || 0) + no;
} else {
// insert a new entry instead
acc.push({
group: line.group,
verified: yes,
unverified: no
});
}
return acc;
}, []); // use an array as the initial value of the accumulator
console.log(output);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句