关于合并数组对象的问题

// 数组 1
let a = [{
    name: 'a',
    number: '1'
}, {
    name: 'b',
    number: '3'
}]

// 数组 2
let b = [{
    name: 'a',
    number: '2'
}, {
    name: 'b',
    number: '3'
}, {
    name: 'c',
    number: '4'
}]

我的代码如上示例,我现在想把代码合并为如下格式:

let a = [{
    name: 'a',
    number: '3'
}, {
    name: 'b',
    number: '6'
}, {
    name: 'c',
    number: '4'
}]

尝试实现代码:

let obj = []
for (let n = 0; n < a.length; n++) {
    for (let i = 0; i < b.length; i++) {
        if (a[n].name == b[i].name) {
            obj.push(a[n])
        } else {
            obj.push(b[i])
        }
    }
}

但是运行中发现,运行结果错误,排查问题出在else
请问如何解决,还望指点谢谢!

阅读 2k
2 个回答
a.concat(b).reduce((res, item) => {
  let exists = res.find(w => w.name === item.name);
  if (!exists) {
    exists = { name: item.name, number: 0 };
    res.push(exists);
  }
  exists.number += Number(item.number);
  return res;
}, []);
function mergeData(a, b) {
  const arr = [...a, ...b];
  const resObj = {};
  arr.forEach(({ name, number }) => {
    const v = Number(number);
    if (resObj[name]) {
      resObj[name] = resObj[name] + v;
    } else {
      resObj[name] = v;
    }
  });
  return Object.keys(resObj).map((key) => ({
    name: key,
    number: `${resObj[key]}`,
  }));
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题