【问题标题】:Combine 2 array of objects if matches are found如果找到匹配项,则合并 2 个对象数组
【发布时间】:2022-11-28 10:00:59
【问题描述】:

你好,

我有这两个对象数组:

const arr1 = [{"id":"pear","qty":2},{"id":"apple","qty":2}];
const arr2 = [{"id":"pear","qty":5},{"id":"lemon","qty":1}];

我想将它们组合起来,但同时在它们具有相同的id 时将它们的值相加在 qty 中,所以这是预期的输出:

[{"id":"pear","qty":7},{"id":"apple","qty":2},{"id":"lemon","qty":1}];

我试过这个但它只保留第一个对象:

const newArray = arr1.map((obj) => {
  const secondArrayObj = arr2.find((obj2) => obj2.id === obj.id);
  if (secondArrayObj) {
    return {...secondArrayObj, ...obj}
  }
  return null;
}).filter((obj) => obj != null);
console.log(newArray); 

这里最好的方法是什么?

谢谢你。

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    我们可以通过Array.reduce()Array.filter()来完成

    const arr1 = [{"id":"pear","qty":2},{"id":"apple","qty":2}];
    const arr2 = [{"id":"pear","qty":5},{"id":"lemon","qty":1}];
    
    let arr3 = [...arr1,...arr2]
    arr3 = arr3.reduce((a,v) => {
      let obj = a.find(i => i.id === v.id)
      if(obj){
       obj.qty += v.qty 
       }else{
        a.push(v) 
       }
      return a
    },[])
    console.log(arr3)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-22
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      相关资源
      最近更新 更多