Javascript - 求和二维数组

标签 javascript arrays

<分区>

我有 2 个二维数组

var arr1 = [
  [1, 'a'],
  [2, 'b']
]

var arr2 = [
  [3, 'a'],
  [5, 'c']
]

我想将这两个数组相加得到这个结果

var output = [
  [4, 'a'],
  [2, 'b'],
  [5, 'c']
]

我试着写了 2 个 .map 函数,但是除了想要的结果之外,这将返回很多重复项:

function sumArrays (arr1, arr2) {
  var output = [];
  arr2.map(function(i) {
    arr1.map(function(n) {
      if (i[1] === n[1]) {
        output.push([i[0] + n[0], i[1]])
      } else {
        output.push(i)
      }
    })
  })
  return output;
}

是否有更简单的方法来执行此操作,或者我现在应该删除除特定字符串的最高值以外的所有内容?

感谢您的帮助。

最佳答案

请不要使用Array#map ,当你不需要一个新的数组时,这个方法返回。

您可以为 list 使用哈希表并检查并更新 arr2Array#forEach .

使用 arr1 进行更新的提案

var arr1 = [[1, 'a'], [2, 'b']],
    arr2 = [[3, 'a'], [5, 'c']],
    inventory = Object.create(null);

arr1.forEach(function (a) {
    this[a[1]] = a;
}, inventory);

arr2.forEach(function (a) {
    if (!this[a[1]]) {
        this[a[1]] = [0, a[1]];
        arr1.push(this[a[1]]);
    }
    this[a[1]][0] += a[0];
}, inventory);

console.log(arr1);
.as-console-wrapper { max-height: 100% !important; top: 0; }

result 的新数组提案。

var arr1 = [[1, 'a'], [2, 'b']],
    arr2 = [[3, 'a'], [5, 'c']],
    inventory = Object.create(null),
    result = arr1.map(function (a) {
        return this[a[1]] = [a[0], a[1]];
    }, inventory);

arr2.forEach(function (a) {
    if (!this[a[1]]) {
        this[a[1]] = [0, a[1]];
        result.push(this[a[1]]);
    }
    this[a[1]][0] += a[0];
}, inventory);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于Javascript - 求和二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191628/

相关文章:

javascript - 在 chrome 中缩小到 25% 时,div 中的元素超出范围(不在 div 内)

javascript - D3 : Unit Bar Chart with Brush and Zoom (transpose)

javascript - 如何将可变数据放入数组,javascript

java - 传递数组 - 线程中出现异常 "main"java.lang.ArrayIndexOutOfBoundsException : 5

arrays - PostgreSQL - 计算 JSON 中的元素

javascript - 如何专门针对 Firefox 浏览器?

javascript - 将 jQuery 单击事件绑定(bind)到表格每一行上的每个 anchor 标记的最佳做法是什么

javascript - 如何在D3.js中设置节点和其他svg元素之间的碰撞

javascript - 如何将数组对象保存到 Chrome 本地存储中

c - 比较2D数组内部,函数内部的字符串