【问题标题】:How to merge two arrays of in Javascript de-duplicate items and sum their quantities如何在Javascript中合并两个数组去重复项并将它们的数量相加
【发布时间】:2016-08-02 23:57:32
【问题描述】:

我有两个 JavaScript 数组:

const array1 = [
  {id: 01, qnty: 2}, 
  {id: 02, qnty: 1}, 
  {id: 03, qnty: 1}
];

const array2 = [{id: 02, qnty: 3}];

我希望输出是:

const newArray = [
  {id: 01, qnty: 2},
  {id: 02, qnty: 4},
  {id: 03, qnty: 1},
];

输出数组应该已经删除了具有相同id 的项目,并将它们的qnty 值相加。

【问题讨论】:

  • 我没有投反对票,但是(看起来)家庭作业的问题是题外话。您应该提供您目前拥有的代码示例,并指出您遇到的困难。
  • 还不够清楚吗?
  • 并不是说不够清楚,而是您似乎根本没有尝试过,并要求SO做您的工作/作业。
  • 来自help请求家庭作业帮助的问题必须包括您迄今为止为解决问题所做的工作的总结,以及您遇到的困难的描述它。
  • 我已经尝试了一段时间,只是似乎找不到用于这种情况的正确方法顺序......

标签: javascript arrays merge


【解决方案1】:

function inArray(arr, obj) {
  for (var i = 0; i < arr.length; i++) {
    if (arr[i].id == obj.id) {
      return i;
    }
  }
  return -1;
}


const array1 = [{  id: 01,  qnty: 2}, {  id: 02,
  qnty: 1}, {  id: 03,  qnty: 1}];



const array2 = [{  id: 02,  qnty: 3}];

var newArray = array1.slice(0); //clone array1
for (var i = 0; i < array2.length; i++) {
  var obj = array2[i];
  var index = inArray(array1, obj);
  if( index== -1){
     newArray.push(obj);
  }else {
    newArray[index] = { id: newArray[index].id,  qnty: newArray[index].qnty + obj.qnty } 
  }
}

console.log(newArray);
const newArray = [ {id: 01, qnty: 2}, {id: 02, qnty: 4}, {id: 03, qnty: 1}, ];

【讨论】:

  • 现在扩展它以处理三个或四个或任意数量的数组。你能想出一种方法让冗长的数组更简单、更快吗? (提示:使用带有每个 id 的临时对象作为属性名称。)
猜你喜欢
  • 2021-01-02
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多