我需要一些帮助,我试图通过name属性合并此对象,但是我被困住了,我试图通过数组方法而不是for循环来解决此问题。
var arr = [
{name: 'lucas', number: 20},
{name: 'lucas', number: 22},
{name: 'luna', number: 10},
{name: 'luna', number: 23},
{name: 'diego', number: 15}
];
var expectedOutput = [
{name: 'lucas', number: 42},
{name: 'luna', number: 33},
{name: 'diego', number: 15}
];
答案 0 :(得分:1)
您可以使用reduce
并使用Object.values
以获得预期的输出。这是工作示例:
var arr = [{name: 'lucas', number: 20}, {name: 'lucas', number: 22}, {name: 'luna', number: 10} , {name: 'luna', number: 23}, {name: 'diego', number: 15}];
var result = Object.values(arr.reduce((acc, {name, number})=>{
acc[name] = acc[name] || {name, number:0};
acc[name].number+=number;
return acc;
},{}));
console.log(result);
答案 1 :(得分:1)
var arr = [{name:'lucas',number:20},{name:'lucas',number:22},{name:'luna',number:10},{name:'luna',number:23},{name:'diego',number:15}];
let finalResult = arr.reduce((result, obj) => {
if (result[obj.name]) {
result[obj.name].number += obj.number || 0
} else {
result[obj.name] = { ...obj};
}
return result
}, {})
finalResult = Object.values(finalResult)
console.log(finalResult)