我有一个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中实现这一目标
答案 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 强>