如何在Javascript中过滤和计算相同的对象数组值

如何在Javascript中过滤和计算相同的对象数组值,javascript,arrays,object,filter,Javascript,Arrays,Object,Filter,例如,我有一个对象数组 const purchases = [ { name: 'a', price: 500 }, { name: 'a', price: 1000 }, { name: 'b', price: 500 }, { name: 'b', price: 500 } ] 我如何才能有效地过滤和计算购买。名称,创建输出可以是这样的 let filteredPurchases = [ {

例如,我有一个对象数组

const purchases = [
  {
    name: 'a',
    price: 500
  },
  {
    name: 'a',
    price: 1000
  },
  {
    name: 'b',
    price: 500
  },
  {
    name: 'b',
    price: 500
  }
]
我如何才能有效地过滤和计算购买。名称,创建输出可以是这样的

let filteredPurchases = [
  {
    name: 'a',
    price: 1500  
  },
  {
    name: 'b',
    price: 1000  
  }
]
您可以将arrayreduce与Object.values一起使用,根据名称值对数据进行分组,为对象中的相同名称添加价格,然后提取所有值

const purchases=[{name:'a',price:500},{name:'a',price:1000},{name:'b',price:500},{name:'b',price:500}], result=Object.valuespruchaces.reducer,{name,price}=>{ r[name]=r[name]|{name,price:0}; r[名称]。价格+=价格; 返回r; },{};
console.logresult 您可以创建和中间映射以求项目价格之和,然后对其进行迭代以创建所需结果:

常数购买=[{ 名称:‘a’, 价格:500 }, { 名称:‘a’, 价格:1000 }, { 名称:‘b’, 价格:500 }, { 名称:‘b’, 价格:500 } ]; const mapped=purchases.reduceresult,item=>{ if!结果[项目名称]{ 结果[项目名称]=项目价格; }否则{ 结果[项目名称]=结果[项目名称]+项目价格; } 返回结果; }, {}; const result=Object.keysmapped.mapkey=>{ 返回{ 姓名:key,, 价格:映射[键] }; };
console.logresult 您可以使用和对象引用做一些简单的事情来保持索引

常数购买=[{ 名称:‘a’, 价格:500 }, { 名称:‘a’, 价格:1000 }, { 名称:‘b’, 价格:500 }, { 名称:‘b’, 价格:500 } ]; //保存索引的对象 const ref=Object.createnull; 让res=购买 //迭代数组 .reducearr,o=>{ //检查已定义的索引,如果已定义,则添加价格值 如果订单名称在参考arr[ref[o.name].price+=o.price中; //若并没有,那个么定义索引并插入一个具有对象所有属性的新对象 else arr[ref[o.name]=arr.length]=Object.assign{},o; //返回数组引用 返回arr; //将初始值设置为结果的数组 }, [] console.logres 常数购买=[ { 名称:‘a’, 价格:500 }, { 名称:‘a’, 价格:1000 }, { 名称:‘b’, 价格:500 }, { 名称:‘b’, 价格:500 } ]; var结果=[] 函数findSumarray,键{ 设和=0; array.forEachfunctionelement{ ifkey==element.name{ 总和=总和+要素价格; } }; 回报金额; } purchases.forEachfunctionelement{ 设sum=findSumpurchases,element.name; 结果[element.name]={name:element.name,price:sum}; }; console.logResult obj
console.logObject.valuesresult;我尝试过代码和搜索相关的问题,mdn,但我不想分享我的失败代码