gpt4 book ai didi

javascript - 减少javascript中的对象数组

转载 作者:行者123 更新时间:2023-12-01 08:15:02 24 4
gpt4 key购买 nike

我在 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未验证 值,否则,插入一个新值:

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);

关于javascript - 减少javascript中的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59935471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com