使用推入和移位方法反转数组

时间:2019-04-04 00:53:59

标签: 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秒钟。中止它吗?”这段代码有什么问题?

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)