【问题标题】:Reversing an array with push and shift methods [duplicate]使用 push 和 shift 方法反转数组[重复]
【发布时间】:2019-04-04 00:53:58
【问题描述】:

我正在尝试使用 push 和 shift 方法为反向数组编写一个函数,但它不起作用。

function reverseArrayInPlace(array) {
    for (let i = 0; i < array.length - 1; i++) {
        array.push(array.shift);
    }
    return array;
}

我猜 for 循环会永远循环,因为我在 eloquentjavascript 的网站上运行代码,并且在运行代码时收到以下消息“此代码已运行 2 秒。中止它?”这段代码有什么问题?

【问题讨论】:

  • shift() not shift ...你必须调用方法
  • 还是不行@charlietfl - [1, 2, 3] -> [3, 1, 2]
  • @JackBashford 这里隐藏了两个问题。第一个是印刷错误,第二个是错误的算法方法。修复一个不会自动修复另一个。
  • @charlietfl 谢谢。实际问题不是调用方法。仍然是错误的,但看到结果后,我明白了逻辑部分。
  • 在浏览器不死机时可以更轻松地整理逻辑

标签: javascript arrays


【解决方案1】:

您当前的代码有两个问题:一个是拼写错误,另一个是算法。

首先,您目前没有调用 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 中看到一些替代选项,这在技术上是重复的,除了错字。

【讨论】:

  • 好奇你用什么工具来创建图表?
  • @charlietfl 只是代码块中的box-drawing characters
  • 可是手动写的?还是某种编辑器?
  • 是的,在线和离线都有工具可以为您完成,但对于这么小的事情,手动完成会更快。
【解决方案2】:

您实际上并没有调用该方法,您只是将它作为引用传递。

为了更清楚,请执行以下操作:

let temp_value = array.shift()
array.push(temp_value)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2021-02-10
    • 2021-06-26
    相关资源
    最近更新 更多