2016-06-12 58 views
0

合并两个阵列我有两个阵列(ARR1 & ARR2)这样通过分组基于第一阵列的元件在Javascript

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

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

我想将它们组在一起成为根据的值在JavaScript第三阵列第一阵列。所需的输出:

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

注:我有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

注:我不得不ARR2开始与和能够检索第一个值并删除重复到ARR1。

而不是创建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"] 

但是请注意,obj是进一步处理相当有用的,因为如果你需要得到与"B"关联的值,你不需要再通过一个数组进行搜索,你可以简单地说obj["B"](这将给阵列["ba","bb","bc"]) 。所以第二个"B"的值是obj["B"][1]

进一步阅读:

相关问题