在Javascript中获取数组的每个第n个值并将每个第n个值推送到数组

时间:2018-06-05 17:40:39

标签: javascript arrays

我有一个数组,里面有数组,如下所示:

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

3 个答案:

答案 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);