2016-06-12 7 views
0

における第一の配列の要素に基づいてグループ化することにより、2つの配列をマージします最初の配列。所望の出力:私はの値に基づいて、JavaScriptで3番目のアレイにグループ化し、それらをしたい、この</p> <pre><code>var arr1 = ["A","B","C"]; var arr2 = [["A","aa"], ["A","ab"], ["A","ac"],["B","ba"],["B","bb"],["B","bc"],["C","ca"],["C","cb"]]; </code></pre> <p>のような二つの配列を(ARR1 & ARR2)はJavascriptを

arr3 = [ ["A",["aa","ab","ac"]], ["B",["ba","bb","bc"] ], ["C",["ca","cb"]] ] 

注:私はそもそもARR2を持っていたし、最初の値を取得し、ARR1に重複を削除することができました。

お知らせください。私はそもそもARR2を持っていたし、最初の値を取得し、ARR1に重複を削除することができた:

答えて

2

この

var arr1 = ["A", "B", "C"]; 

var arr2 = [ 
    ["A", "aa"], 
    ["A", "ab"], 
    ["A", "ac"], 
    ["B", "ba"], 
    ["B", "bb"], 
    ["B", "bc"], 
    ["C", "ca"], 
    ["C", "cb"] 
]; 
var newVal = arr1.map(function(x) { 
    var filter = arr2.filter(function(y) { 
    return y[0] == x; 
    }).map(function(y) { 
    return y[1]; 
    }); 
    return [x, filter]; 
}) 
console.log(newVal); 

DEMO

1

NOTEのように試してみてください。

むしろ中間のステップとしてarr1を作成するよりも、私はおそらく真ん中のステップとして、オブジェクトを作成します。

var obj = arr2.reduce(function(a,b){ 
    if (!a[b[0]]) a[b[0]] = []; 
    a[b[0]].push(b[1]); 
    return a; 
},{}); 

// obj is now {"A":["aa","ab","ac"],"B":["ba","bb","bc"],"C":["ca","cb"]} 

、ご希望の出力配列にそのオブジェクトを変換するには:

var arr3 = Object.keys(obj).map(function(v) { return [v, obj[v]]; }); 
// [["A",["aa","ab","ac"]],["B",["ba","bb","bc"]],["C",["ca","cb"]]] 

実際にarr1アレイが別のもののために必要な場合:

var arr1 = Object.keys(obj); 
// ["A", "B", "C"] 

しかし、あなたは、あなたが再び配列を検索する必要はありません"B"に関連付けられた値を取得する必要がある場合、あなたは、単に(配列["ba","bb","bc"]を与えるであろう)obj["B"]を言うことができるのでobjは、さらなる処理のため、非常に有用であることがわかり。したがって、2番目の"B"の値はobj["B"][1]です。

さらに読書:

関連する問題