2012-02-09 53 views
4

var arr = [[7,50],[7,60],[8,40]];如果有重複值,那麼Javascript合併數組

如何合併這個數組才能成爲這樣的結果? [[7,110],[8,40]];

讓說如果我有數百這些小型陣列由陣列

+1

做通過它冒泡排序和環:P – 2012-02-09 07:23:47

回答

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

這裏是與陣列結果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;  
}