javascript - 使用push和shift方法反转数组

标签 javascript arrays

我正在尝试使用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/

相关文章:

javascript - 如何将回调函数传递给父级

javascript - 检查 javascript 函数是否未完成

javascript - 使用 JavaScript 编程从另一个数组的值获取数组中最低索引处的值

javascript - 如何防止将值两次插入数组? (jQuery)

python - 将 2D 数组添加到 3D 数组

javascript - 在循环中多次重复数组中的项目?

java - 替换 Guava 的 Bytes 和 Longs

javascript - HTML 中的正文和 Div 对齐

javascript - 回调函数作为带参数的字符串

javascript - 如果元素溢出应用动态滚动