首页 > 解决方案 > 展开矩阵数组 - 类型错误:无法读取未定义的属性“反向”

问题描述

我正在尝试练习解决 JS 编码问题。给定一个数组矩阵,顺时针旋转展开数组。

// Sample Array 
//  1  2  3  4
//  12 13 14 5
//  11 16 15 6
//  10 9  8  7  

matrix = [[1, 2, 3, 4], [12, 13, 14, 5], [11, 16, 15, 6], [10, 9, 8, 7]]  

// expected output
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]  


matrix2 = [["a", "b", "c"], ["d", "e", "f"], ["g", "h", "i"]]  

// expected output  
["a", "b", "c", "f", "i", "h", "g", "d", "e"]

我编写了以下解决方案,但是当它尝试尊重底部数组时它会一直崩溃。我不断得到Uncaught TypeError: Cannot read property 'reverse' of undefined

奇怪的是,我在网上找到了多个解决这个编码挑战的解决方案,它们都与这个解决方案相似。我尝试复制/粘贴这些解决方案,但是当我运行它们时,我仍然遇到上述相同的错误。(示例 1示例 2)。

如何改进我的代码以避免此错误并达到预期的结果?

function unrollMatrix(array) {

    let newArray = [];

    while (array.length > 0) {

        // Get top row 
        results = [...newArray, array.shift()];

        // Get right column
        results = [...newArray, array.map(row => row.pop())];

        // Get bottom row in reverse 
        results = [...newArray, array.pop().reverse()];

        // Get left column in reverse 
        results = [...newArray, array.map(row => row.shift()).reverse()];
    }

    return newArray.flat();
}

标签: javascriptarraysdata-structures

解决方案


您尚未为 分配任何值newArray。其余代码看起来不错,只需将值分配给newArray而不是result.

let matrix = [
  [1, 2, 3, 4],
  [12, 13, 14, 5],
  [11, 16, 15, 6],
  [10, 9, 8, 7]
];

function unrollMatrix(array) {

  let newArray = [];

  while (array.length > 0) {

    // Get top row 
    newArray = [...newArray, array.shift()];

    // Get right column
    newArray = [...newArray, array.map(row => row.pop())];

    // Get bottom row in reverse 
    newArray = [...newArray, array.pop().reverse()];

    // Get left column in reverse 
    newArray = [...newArray, array.map(row => row.shift()).reverse()];
  }
  return newArray.flat(1);
}

let ans = unrollMatrix(matrix);

console.log(ans);


推荐阅读