4

私は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]];

対応するキーの合計で 1 つのマージされた配列を取得したい。

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

どちらの配列にも一意のキーがありますが、対応するキーを合計する必要があります。

ループ、連結などを試しましたが、必要な結果が得られません。

誰かが前にこれをしましたか?

4

5 に答える 5

0

[].map() を使用して短いルーチンをコーディングできます。

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]];

array1=array2.concat(array1).map(function(a){
  var v=this[a[0]]=this[a[0]]||[a[0]];
  v[1]=(v[1]||0)+a[1];
 return this;
},[])[0].slice(1);

alert(JSON.stringify(array1)); 
//shows: [[1,10],[2,10],[3,10],[4,10],[5,50],[6,50],[7,10],[8,10],[9,10]]

わずか 3 行のコードで、push() や sort() のような内部関数呼び出し、さらには if() ステートメントさえも必要としない点が気に入っています。

于 2013-06-14T18:59:14.923 に答える