javascript - 展开矩阵数组 - 类型错误:无法读取未定义的属性“反向”
问题描述
我正在尝试练习解决 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();
}
解决方案
您尚未为 分配任何值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);
推荐阅读
- javascript - 如何在 Angular 中处理空大小写?
- javascript - 在普通的 VueJS 项目中使用 Typescript 函数
- sql - 将 SQL 中第一个字符之后的所有内容更新为小写?
- wkhtmltopdf - wkhtmltopdf 显示黑框而不是文本
- javascript - 解决无法集中读取未定义的属性“propertyName”
- sql - 在VB6中我们需要使用哪些adodb记录集选项来在短时间内从SQL中加载数据
- sql - 将记录链接到其他人
- c# - 如何用星号打印星号图案
- ios - 如何在点击的光线触摸而不是来自中心视图的光线处生成 Reality Composer 场景
- apache - 确定原因并修复 302 重定向