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

时间:2012-02-09 07:17:56

标签: javascript

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

如何合并这个数组成为这样的结果? [[7,110],[8,40]];

假设我有超过数百个由数组包装的较小数组

2 个答案:

答案 0 :(得分:5)

我建议您使用地图来存储结果而不是数组。这是一个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 :(得分: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;    
}
相关问题