1

タイトルがわかりにくかったらすいません。複数の配列に関してはあまり得意ではないので、これを説明するのはちょっと難しいです。

私は配列を持っています:[ [21, 1000], [21, 500], [18, 100], [18, 200] ]

今、私はこの結果の配列を取得したい:[ [21, 1500], [18, 300] ]

どうすればこれを行うことができますか?

配列キーとして 21 と 18 を使用しようとしましたが、この方法では、配列をforループで.lengthカウントして使用できませんでした。ほぼ機能させるために、合計4つのアレイになりました。


編集:

21 と 18 の値を配列キーとして使用することは避けたいと思います。

また、結果の配列/オブジェクトを反復処理し、21 と 18 の「キー」も使用して、ページにさらに変更を加えたいと考えています。

すでにすべての応答に感謝します!

4

5 に答える 5

6

オブジェクトを作成するのはどうですか:

var arr = [ [21, 1000], [21, 500], [18, 100], [18, 200] ];
    obj = {};

for (i=0; i<arr.length; i++) {
    obj[arr[i][0]] = (obj[arr[i][0]] || 0) + arr[i][1];
}

// obj now equals {18: 300, 21: 1500} 
// obj[21] equals 1500 etc

フィドル

同じ方法で配列を作成できます:

var arr  = [ [21, 1000], [21, 500], [18, 100], [18, 200] ],
    arr2 = [];

for (i=0; i<arr.length; i++) {
    arr2[arr[i][0]] = (arr2[arr[i][0]] || 0) + arr[i][1];
}

// giving you the array [18: 300, 21: 1500]
// where arr2[18] equals 300
于 2013-05-09T18:05:20.847 に答える
2

jQuery要求した結果配列を取得するために、これは絶対に必要ありません。

var one = [21, 18];
var two = [ [21, 1000], [21, 500], [18, 100], [18, 200] ];
var results = [];

for(var i in one) {
    results[i] = 0;

    for(var x in two)
        if(two[x][0] === one[i])
            results[i] = results[i] + two[x][1];

    results[i] = [one[i], results[i]];
}

ここでフィドル

于 2013-05-09T18:08:22.970 に答える
0
function aggregateResults(indexes, inputArray) {
  var ret = [], tmp;
  for (var i=0; i<indexes.length; i++) {
    tmp = 0;
    for (var j=0; j<inputArray.length; j++) {
      tmp += inputArray[j][0] == indexes[i] ? inputArray[j][1] : 0;
    }
    ret.push([indexes[i], tmp])
  }
  return ret;
}
于 2013-05-09T18:38:26.230 に答える
0

値が適切でない場合は、これを使用できます。

フィドル:
http://jsfiddle.net/acturbo/YWaja/

javasript:

var array1=    [21, 18];
var array2 =   [ [21, 1000], [21, 500], [18, 100], [18, 200] ];
var result =   [ [0,0], [0,0] ];

for (i=0;i<array1.length;i++){

    result[0,i][0] = array1[i];

    for (j=0;j<array2.length;j++){

        var key = array2[i,j][0];
        var val = array2[i,j][1];

        if (  key == array1[i] ){
            result[0,i][1] += val;
        }
    }
}
于 2013-05-09T18:25:39.390 に答える