我有一个对象数组,每个对象有 4 个属性,如下所示:
let arr = [
{name: john, lastName: smith, counter:1, city: New York}
{name: john, lastName: smith, counter:1, city: New York}
{name: emilio, lastName: kouri, counter:1, city: euy}
{name: john, lastName: smith, counter:1, city: New York}
]
我想减少它以返回这个(对计数器求和)
[{name: emilio, lastName: kouri, counter:1, city: euy}
{name: john, lastName: smith, counter:3, city: New York}]
这是我现在使用的代码,它正确地减少了它但只返回 [counter, name],我希望它返回每个对象的所有四个属性,怎么做?
let counts = arr.reduce((prev, curr) => {
let count = prev.get(curr.name) || 0;
prev.set(curr.name, curr.counter + count);
return prev;
}, new Map());
let reducedObjArr = [...counts].map(([key, value]) => {
return {key, value}
})
console.log('reducido',reducedObjArr);
您只需要一个reduce
没有嵌套map
语句的语句:
let arr = [{
name: "john",
lastName: "smith",
counter: 1,
city: "New York"
}, {
name: "john",
lastName: "smith",
counter: 1,
city: "New York"
}, {
name: "emilio",
lastName: "kouri",
counter: 1,
city: "euy"
}, {
name: "john",
lastName: "smith",
counter: 1,
city: "New York"
}];
let counts = arr.reduce((acc, curr) => {
if (!acc.some(({ name }) => name == curr.name)) {
acc.push(curr);
} else {
acc.find(({ name }) => name == curr.name).counter++;
}
return acc;
}, []);
console.log(counts);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句