我有一个数组,里面有数组,如下所示:
var arr = [
["title1", "title2", "title3"],
["description1", "description2", "description3"],
["id1", "id2", "id3"]
];
并且,我想从数组中获取每个第n个值并将其推送到一个新对象,所以它看起来像这样:
var newArr = [
["title1", "description1", "id1"],
["title2", "description2", "id2"],
["title3", "description3", "id3"],
];
我知道在这种情况下我可以使用for循环,但我不确定如何获得每个第n个值。
编辑:正如CRice所述,解决方案是transposing a 2D array。
答案 0 :(得分:3)
您可以通过将外部数组中的索引作为内部数组的索引来减少数组,反之亦然。
var array = [["title1", "title2", "title3"], ["description1", "description2", "description3"], ["id1", "id2", "id3"]],
result = array.reduce(
(r, a, i) => {
a.forEach((v, j) => (r[j] = r[j] || [])[i] = v);
return r;
},
[]
);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
这是一个100%的工作解决方案。即使arr和arr [0]的长度不匹配,也要工作:
var arr = [
["title1", "title2", "title3", "title4"],
["description1", "description2", "description3", "description4"],
["id1", "id2", "id3", "id4"],
];
var newArr = [];
if(arr[0]){
for(var i=0; i<arr[0].length; i++){
newArr[i] = new Array();
for(var a=0; a<arr.length; a++){
if(arr[a][i]){
newArr[i].push(arr[a][i])
}
}
}
}
答案 2 :(得分:0)
我认为for
循环对于这种用例来说是个不错的选择。
var arr = [
["title1", "title2", "title3"],
["description1", "description2", "description3"],
["id1", "id2", "id3"]
];
var resultArray = [];
for (var i = 0; i < arr.length; i++) {
for (var j = 0; j < 3; j++) {
resultArray[j] = resultArray[j] || [];
resultArray[j][i] = arr[i][j];
}
}
console.log(resultArray);