【问题标题】:Getting every nth value of arrays in Javascript and pushing every nth value into array [duplicate]在Javascript中获取每个数组的第n个值并将每个第n个值推入数组[重复]
【发布时间】:2018-11-15 06:56:12
【问题描述】:

我有一个数组,里面的数组看起来像这样:

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

【问题讨论】:

  • 所有数组的长度是否总是相同的?
  • { … } 不是数组?!
  • 你为什么要使用forEach?只需使用标准的 for 循环即可。

标签: javascript arrays


【解决方案1】:

您可以通过将外部数组的索引作为内部数组的索引来减少数组,反之亦然。

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; }

【讨论】:

  • 现在这是正确的混淆......
  • 我认为使用 reduce 和 forEach 而不是简单的 forLoop 不是一个好的选择!
  • @NishantDixit,为什么?
【解决方案2】:

我认为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);

【讨论】:

    【解决方案3】:

    这是一个 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])
                    }
                }
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-09
      • 2013-11-28
      • 2021-10-05
      • 2020-07-21
      • 2018-08-17
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多