首页 > 解决方案 > JavaScript:如何根据字段在数组中添加和排序相同的字段?

问题描述

我有以下数组 a ,如下所示:

var a = [
  {name: 'phone' , id:1 ,num:1},
  {name: 'milk' ,id:2, num:1},
  {name: 'apple' , id:3 , num:1},
  {name: 'phone', id: 4, num:3},
]

我想按数组名称过滤并添加自己的 num

var currentName = a[0]
let newArrys=[]
for(let i = 0; i<a.length;i++){
   if(currentName.name == a[i].name){
       a[i].num = a[i].num + currentName.num
       let tmepArry = [];
        tempArry.push(a[i]);
        newArrys.push(tempArry);
   }
}

我正在尝试获取以下二维数组:

[
 [{name: 'phone', id:1, num:4}],
 [{name: 'milk',id:2, num:1}],
 [{name: 'apple', id: 3 num:1}]
]

结果无法筛选。

我的尝试无效。

你能帮助我吗?

标签: javascriptarrays

解决方案


鉴于:

var a = [
  {name: 'phone' , id:1 ,num:1},
  {name: 'milk' ,id:2, num:1},
  {name: 'apple' , id:3 , num:1},
  {name: 'phone', id: 4, num:3},
]
const newArrys = a.reduce((acc, current) => {
  // find an object in the array with a matching name
  const existing = acc.find(obj => obj.name === current.name);
  if (existing) {
    // combine the numbers
    existing.num += current.num;
  } else {
    acc.push(current);
  }
  return acc;
}, []).map(obj => [obj])

这将为您提供所需的东西。


推荐阅读