Javascript合并2个数组并将相同的键值相加

mar*_*rco 3 javascript arrays merge sum

我有2个数组:

    var array1 = [[5,10],[6,10],[7,10],[8,10],[9,10]];
    var array2 = [[1,10],[2,10],[3,10],[4,10],[5,40],[6,40]];
Run Code Online (Sandbox Code Playgroud)

想要获得1个合并数组与相应键的总和;

    var array1 = [[1,10],[2,10],[3,10],[4,10],[5,50],[6,50],[7,10],[8,10],[9,10]];
Run Code Online (Sandbox Code Playgroud)

两个阵列都有唯一的密钥,但需要对相应的密钥求和.

我试过循环,concat等,但无法得到我需要的结果.

有人这样做过吗?

小智 6

您可以使用.reduce()传递跟踪找到的集合的对象,并进行添加.

演示: http : //jsfiddle.net/aUXLV/

var array1 = [[5,10],[6,10],[7,10],[8,10],[9,10]];
var array2 = [[1,10],[2,10],[3,10],[4,10],[5,40],[6,40]];

var result =
    array1.concat(array2)
          .reduce(function(ob, ar) {
              if (!(ar[0] in ob.nums)) {
                  ob.nums[ar[0]] = ar
                  ob.result.push(ar)
              } else
                  ob.nums[ar[0]][1] += ar[1]

              return ob
          }, {nums:{}, result:[]}).result
Run Code Online (Sandbox Code Playgroud)

如果需要对结果进行排序,请将其添加到结尾:

.sort(function(a,b) {
    return a[0] - b[0];
})
Run Code Online (Sandbox Code Playgroud)