Javascript 如何组合数组中的重复对象值,然后输出列表?

Javascript 如何组合数组中的重复对象值,然后输出列表?,javascript,sorting,filter,reduce,Javascript,Sorting,Filter,Reduce,我花了几个小时在谷歌上搜索,看到了很多关于删除重复项的例子,但是没有合并值。所以我希望有人能帮我 我想检查项目名称是否相同,然后将价格相加,然后推送到新列表数组 const项=[ {名称:'apple',价格:'10'}, {名称:'香蕉',价格:'1'}, {名称:'orange',价格:'2'}, {名称:'apple',价格:'5'}, {名称:'orange',价格:'2.5'}, {名称:'香蕉',价格:'3'}, {名称:'草莓',价格:'7'}, {名称:'apple',价格:'

我花了几个小时在谷歌上搜索,看到了很多关于删除重复项的例子,但是没有合并值。所以我希望有人能帮我

我想检查项目名称是否相同,然后将价格相加,然后推送到新列表数组

const项=[
{名称:'apple',价格:'10'},
{名称:'香蕉',价格:'1'},
{名称:'orange',价格:'2'},
{名称:'apple',价格:'5'},
{名称:'orange',价格:'2.5'},
{名称:'香蕉',价格:'3'},
{名称:'草莓',价格:'7'},
{名称:'apple',价格:'12'}
]
让newItem=[]
const checkItem=items.map((上一页,下一页)=>{
if(prev.name==next.name){
return newItem.push={
name:next.name,
值:parseInt(上一个价格)+parseInt(下一个价格)
}
}
});

console.log(newItem)
这将起作用。您可以使用reduce和Find

const项=[{
名称:'苹果',
价格:'10'
},
{
名称:'香蕉',
价格:'1'
},
{
名称:“橙色”,
价格:'2'
},
{
名称:'苹果',
价格:'5'
},
{
名称:“橙色”,
价格:'2.5'
},
{
名称:'香蕉',
价格:'3'
},
{
名字:'草莓',
价格:'7'
},
{
名称:'苹果',
价格:'12'
}
]
让结果=项目。减少((acc,el)=>{
if(acc.filter(ele=>ele.name==el.name).length==0){
加速推力(el);
}否则{
let filtered=acc.find(ele=>ele.name==el.name)
filtered.price=parseFloat(filtered.price)+parseFloat(el.price);
}
返回acc;
}, [])
console.log(结果)
数组​.原型​.map()
的回调函数前两个参数是
currentValue
,即数组的项,第二个值是它的索引,而不是prev和next元素

你要找的是这样的东西

const项=[
{名称:“苹果”,价格:“10”},
{名称:“香蕉”,价格:“1”},
{名称:“橙色”,价格:“2”},
{名称:“苹果”,价格:“5”},
{名称:“橙色”,价格:“2.5”},
{名称:“香蕉”,价格:“3”},
{名称:“草莓”,价格:“7”},
{名称:“苹果”,价格:“12”}
];
const combine=items.reduce((acc,item)=>{
if(附件[项目名称]!==未定义){
acc[项目名称]+=编号(项目价格);
}else acc[项目名称]=编号(项目价格);
返回acc;
}, {});
const fruitKeys=Object.keys(合并);
newItem=fruitKeys.map(item=>({name:item,price:combine[item]}));

console.log(newItem)
看起来你需要的是
Number
而不是
parseInt
这里-注意第二个橙色的价格。很好地找到了@georg。我将做编辑非常感谢您对我的问题的快速回答,您的代码非常有意义,我将研究更多的reduce函数。再次感谢!非常感谢您回答我的问题,这是一个非常酷的解决问题的方法,我不知道我可以在if-else语句中运行过滤函数。今天学一个新东西!:)
var new_array = arr.map(function callback(currentValue[, index[, array]]) {
    // Return element for new_array
}[, thisArg])