结合2维数组的元素

时间:2015-10-25 22:46:51

标签: javascript jquery arrays multidimensional-array

我有一个JavaScript数组:

var arr = [["A",["05",90]],["A",["04",240]],["A",["03",235]],["B",["00",123]],["B",["01",234]]];

我希望最终数组看起来像:

var final = [["A",[["05",90],["04",240],["03",235]]],["B",[["00",123],["01",234]]]];

当第一个元素匹配时,通过组合二维数组的所有第二个元素形成最终数组。 请告知如何在JavaScript中实现这一目标

2 个答案:

答案 0 :(得分:0)

如果你从你给出的数组开始:

var arr = [["A",["05",90]],["A",["04",240]],["A",["03",235]],["B",["00",123]],["B",["01",234]]];

然后创建一个新数组来存储值:

var final = [];

并简单地将每个第二级元素(例如["05",90]["01",234])的所有第三级元素(例如"A""B")组合在一起循环遍历数组:

for(var i = 0; i < arr.length; i++) {
    var found = false;
    for(var j = 0; j < final.length; j++) {
        if(arr[i][0] == final[j][0]) {
            final[j][1].push(arr[i][1]);
            found = true;
            break;
        }
    }
    if(!found) {
        final[final.length] = [arr[i][0], [[arr[i][1][0], arr[i][1][1]]]];
    }
}

这实际上是一种排序方法:如果&#34;键&#34;在最终数组中等于1,然后将其添加到该数组中。如果没有,则将其附加到final的末尾。

这是JSFiddle上的工作示例:link

这将输出数组:

["A", [["05", 90], ["04", 240], ["03", 235]]], ["B", [["00", 123], ["01", 234]]]

按要求。

另外,正如@PaulS评论的那样,建议使用Objects作为字符串,使它们成为键值对。但在我的回答中,我坚持使用数组。

答案 1 :(得分:0)

对象键通常是创建此类

组的最简单方法
var tmp = {}; // temporary grouping object
// loop over data
arr.forEach(function (item) {
    // check if group started
    if (!tmp.hasOwnProperty(item[0])) {
        tmp[item[0]] = [];
    }
    // push data to group
    tmp[item[0]].push(item[1]);

});
// map temp object to results array
var results = Object.keys(tmp).map(function (key) {
    return [key, tmp[key]];
});

DEMO