如果存在重复的值,Javascript如何合并数组

4

var arr = [[7, 50], [7, 60], [8, 40]];

如何将此数组合并为以下结果?
[[7, 110], [8,40]];

假设我有数百个这样的小数组包裹在一个大数组中。


1
做一个冒泡排序并循环它 :P - Gaurav Shah
2个回答

5
我建议您使用map来存储结果,而不是数组。以下是O(n)的解决方案:
var arr = [[7,50], [7,60], [8,40]];

function merge_array(arr) {
    var map = {};
    for (var i = 0;i<arr.length;i++) {
        if (arr[i][0] in map) {
            map[arr[i][0]] += arr[i][1];
        } else {
            map[arr[i][0]] = arr[i][1];
        }
    }

    return map;
}

如果你坚决要输出一个数组,那么你可以将其转换。


1

这里是使用数组结果的O(n)解决方案:

function merge(arr){  

    var map = {};
    var key;

    //Constructing the map
    for ( var i = 0 ; i < arr.length ; i++ ) {
      key = arr[i][0];
      if ( typeof map[key] != 'undefined' ){
        map[key] += arr[i][1];
      } else {
        map[key] = arr[i][1];
      }
    }

    //Converting the map to an array
    var result = [];
    for ( key in map ){
       result.push( [key, map[key]] );
    } 

    return result;    
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接