2017-10-29 7 views
-2

ある場合にのみ、私はサブアレイのアレイを有する場合、サブアレイをマージ(第三の位置を追加する)アレイ内:最初の二つの位置が同じ

[ ["a","b",54],["b","c",89],["b","c",84],["c","b",78],["a","b",83],["a","c",87] ] 

Iマージしますサブアレイ(3番目の位置番号(2番目のインデックス)を一緒に追加します)最初の2つの位置がまったく同じ場合にのみ、

私が探していた結果が次のようになります。

[ ["a","b",137],["b","c",173],["c","b",78],["a","c",87] ]

(配列内部サブアレイの最終順序は重要ではありません)

私はこれをどのように行うことができますか?

EDIT:lodashの使用が必要とされていない(しかし、個人的に私はそれがlodashを使用して動作させることはできません)

+0

あなたは何をしようとしたことがありますか?要素のグループ化とマージは非常に一般的な操作なので、すばやいGoogle検索で[多くの有益な結果]が表示されます(https://www.google.com/search?q=js+group+elements+by+multiple+keys)。あなたの質問を区別するために試したことを明記してください。 – 4castle

+0

@ 4castleループよりも優れたものを探していました。 (lodashなどのライブラリの使用のいくつかの種類)。 – Mike

+1

私は素晴らしい解決策を持っていますが、試してみてください。たとえそれが機能しなくても。 – Andrew

答えて

1

あなたはハッシュテーブルの電源を取り、反復することによって新しい結果セットを構築することができ配列。

var array = [["a", "b", 54], ["b", "c", 89], ["b", "c", 84], ["c", "b", 78], ["a", "b", 83], ["a", "c", 87]], 
 
    hash = Object.create(null), 
 
    result = []; 
 

 
array.forEach(function (a) { 
 
    var key = a.slice(0, 2).join('|'); 
 
    if (!hash[key]) { 
 
     result.push(hash[key] = a.slice()); 
 
     return; 
 
    } 
 
    hash[key][2] += a[2]; 
 
}); 
 

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

関連する問題