2016-10-04 12 views
1

である場合、私は5つのオブジェクトを有する:加算値の複数のキーは、例えば同じJS

{ row: aa, col: 1, value: 1 } 
{ row: bb, col: 2, value: 1 } 
{ row: bb, col: 3, value: 1 } 
{ row: aa, col: 1, value: 1 } 
{ row: aa, col: 2, value: 1 } 

をiは値を合計するCOLは同じであるので、出力がなければならない場合:

{ row: aa, col: 1, value: 2 } 
{ row: bb, col: 2, value: 1 } 
{ row: bb, col: 3, value: 1 } 
{ row: aa, col: 2, value: 1 } 

ご協力いただきありがとうございます。あなたがキーを格納するためにreduce()と一つのオブジェクトでこれを行うことができます Sum javascript object propertyA values with same object propertyB in array of objects

+0

私の質問 –

+3

を更新@DanielShillcockあなたはそれ以外の場合は、我々はあなたが問題を抱えているもの時点では分からないだろう、何を試したことは、あなたの質問に適用される方法を表示することができます。 –

+0

[MCVE](http://stackoverflow.com/help/mcve)を作成してください。 http://www.sscce.org/も参照してください。あなたは自分自身でこれを解決するために取った努力を示す必要があります。誰もあなたが一から解決策を出す義務はありませんが、あなたが試したことを改善するのに役立ちます。 – Oka

答えて

4

はこれを試してみました。私はどうなるのか

var data = [ 
 
    { row: 'aa', col: 1, value: 1 }, 
 
    { row: 'bb', col: 2, value: 1 }, 
 
    { row: 'bb', col: 3, value: 1 }, 
 
    { row: 'aa', col: 1, value: 1 }, 
 
    { row: 'aa', col: 2, value: 1 } 
 
] 
 

 
var o = {} 
 
var result = data.reduce(function(r, e) { 
 
    var key = e.row + '|' + e.col; 
 
    if (!o[key]) { 
 
    o[key] = e; 
 
    r.push(o[key]); 
 
    } else { 
 
    o[key].value += e.value; 
 
    } 
 
    return r; 
 
}, []); 
 

 
console.log(result)

+0

はい!これはまさに私が望んでいたものです! :) –

1

配列内にオブジェクトを入れて、その上で反復して、新しいオブジェクトのキーは、古いもののように一致した場合、各反復でチェックして、オブジェクトをロード一致しない場合は別の配列に格納します。一致する場合は、古い値の値にその値を追加します。私は次のコードをテストし、あなたが望むように動作するようです。

var array = [{ row: 'aa', col: 1, value: 1 }, 
     { row: 'bb', col: 2, value: 1 }, 
     { row: 'bb', col: 3, value: 1 }, 
     { row: 'aa', col: 1, value: 1 }, 
     { row: 'aa', col: 2, value: 1 }]; 

var newArray = []; 

for(var x in array) { 
    for(var y in newArray) { 
     var found = false; 
     if(array[x].row == newArray[y].row && array[x].col == newArray[y].col) { 
      newArray[y].value += array[x].value; 
      found = true; 
      break; 
     } 
    } 
    if(!found) { 
      newArray.push(array[x]); 
    } 
} 

console.log(newArray); 
2

完全性のために、変数キーのバージョンでは、パーツをグループ化するオブジェクトとArray#forEachがあります。

var data = [{ row: 'aa', col: 1, value: 1 }, { row: 'bb', col: 2, value: 1 }, { row: 'bb', col: 3, value: 1 }, { row: 'aa', col: 1, value: 1 }, { row: 'aa', col: 2, value: 1 }], 
 
    grouped = []; 
 

 
data.forEach(function (a) { 
 
    var key = ['row', 'col'].map(function (k) { return a[k]; }).join('|'); 
 
    if (!this[key]) { 
 
     this[key] = { row: a.row, col: a.col, value: 0 }; 
 
     grouped.push(this[key]); 
 
    } 
 
    this[key].value += a.value; 
 
}, Object.create(null)); 
 

 
console.log(grouped);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題