我正在尝试使用push和shift方法编写一个用于反向数组的函数,但它不起作用。
function reverseArrayInPlace(array) {
for (let i = 0; i < array.length - 1; i++) {
array.push(array.shift);
}
return array;
}
我猜 for 循环会永远循环,因为我正在 eloquentjavascript 的网站上运行代码,并且在运行代码时收到以下消息“此代码已运行 2 秒。中止它吗?”这段代码有什么问题?
最佳答案
您当前的代码有两个问题:一个是拼写错误,另一个是算法。
首先,您当前没有调用shift:
array.push(array.shift);
// Missing () -------^
第二个问题是您提出的算法不会反转数组,而是会移动它。
请允许我演示一下:
给定一个初始数组 [1, 2, 3, 4]
,您的算法将执行以下操作。
// Initial state
┌───┬───┬───┬───┐
│ 1 │ 2 │ 3 │ 4 │
└───┴───┴───┴───┘
// Shift one... // ...and push it
┌───┬───┬───┐ ┌───┐ ┌───┬───┬───┬───┐
│ 2 │ 3 │ 4 │ -> │ 1 │ │ 2 │ 3 │ 4 │ 1 │
└───┴───┴───┘ └───┘ └───┴───┴───┴───┘
// Shift one... // ...and push it
┌───┬───┬───┐ ┌───┐ ┌───┬───┬───┬───┐
│ 3 │ 4 │ 1 │ -> │ 2 │ │ 3 │ 4 │ 1 │ 2 │
└───┴───┴───┘ └───┘ └───┴───┴───┴───┘
// Etc
如您所见,您的算法不会反转数组,而是以相同的顺序从头到尾附加项目。
您可以在 this question 中看到一些替代选项,除了拼写错误之外,这在技术上是重复的。
关于javascript - 使用push和shift方法反转数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55506329/