我正在尝试使用push和shift方法编写用于反向数组的函数,但是它不起作用。
function reverseArrayInPlace(array) {
for (let i = 0; i < array.length - 1; i++) {
array.push(array.shift);
}
return array;
}
我猜for循环永远循环,因为我正在eloquentjavascript网站上运行代码,并且在运行代码时收到以下消息“此代码已运行2秒钟。中止它吗?”这段代码有什么问题?
答案 0 :(得分:2)
当前代码中存在两个问题:一个是错字,另一个是算法。
首先,您当前不拨打班次:
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中看到一些替代选项,从技术上讲,这是错别字的重复。
答案 1 :(得分:0)
您实际上并没有在调用该方法,只是将其作为引用传递。
要使其更加清晰,请执行以下操作:
let temp_value = array.shift()
array.push(temp_value)