【问题标题】:How to navigate in an Array of strings left and right如何在字符串数组中左右导航
【发布时间】:2017-07-02 01:53:03
【问题描述】:

我有一个字符串数组

var characters = ["Jim", "Anna", "Nick", "Chris", "Peter"];

我的初始位置是 Jim[0]。如果我输入正确,我想进入下一个 在这种情况下,“安娜”。我可以通过将一个添加到当前索引来做到这一点。

当我从初始位置向左输入时事情变得更加棘手?

那么我该如何从 Jim[0] -> Peter[4] 出发呢?

有效的是

Jim[0] - 1 + characters.length which equals to  0 - 1 + 5 = 4

这是彼得。但这似乎不正确,因为在当前值为 Anna[1] 并且我想去 Jim[0] 的情况下我不能这样做。作为1 - 1 + 5 = 5

【问题讨论】:

  • 如果旋转阵列符合您的要求,请查看此答案:stackoverflow.com/questions/1985260/javascript-array-rotate
  • 什么语言?在 Java 中,int mod 使用负数,因此您可以执行类似(假设 delta 是您要移动的数字)(((currentIndex + delta) % array.length) + array.length) %array.length 之类的操作。我相信类似的技术也适用于 Javascript

标签: arrays algorithm iteration subtraction


【解决方案1】:

这样的事情会起作用。

var characters = ["Jim", "Anna", "Nick", "Chris", "Peter"];
var index = 0; // Currently at Jim.
var direction = -1; // 1 for right, -1 for left.

// What's left of our current position?
characters[(index + characters.length + direction) % characters.length]; // Peter!

【讨论】:

  • 如果您已经拥有index,那么使用direction 有什么意义?
  • 嗨乔恩,这是我正在寻找的逻辑。看起来我误解了 % 。谢谢我今天确实学到了一些东西:)
  • @changed index 只是标记当前位置,然后direction 是标记我们是向左还是向右移动。真正的解决方案就是最后一行的公式。
  • @JonG 这很酷,但如果index + length < 0,您的解决方案将会中断。例如(-7 + 5) % 5 = -2
  • @changed index 在这种情况下是介于 0 和 4 之间的值。该公式的目的是获取现有索引并向左或向右移动,而新索引不会超出数组的范围。假设您尚未超出数组的范围。
【解决方案2】:

你可以做一个条件。将索引保存在变量中,而不是对其进行硬编码。这将允许您执行类似于以下伪代码的操作(抱歉,不确定这是用于哪种语言):

new_index = index--
if (new_index < characters.length)
    index = characters.length - 1

然后您可以使用确定的索引来访问数组。您也可以进行类似的环绕前进。

【讨论】:

    【解决方案3】:

    似乎没有一个公式可以不使用条件来计算左右索引。

    如果你不打算使用 if-else 或者只想要单行解决方案,可以使用三元运算符,如下所示:

    new_index = (direction=="left")?(index==0)?characters.length-1:index-1:(index==characters.length-1)?0:index+1
    

    请注意,上面的代码假设只有 2 个可能的方向。

    【讨论】:

      【解决方案4】:

      这就是你要找的东西

      (i % characters.length) + characters.length) % characters.length

      var characters = ["Jim", "Anna", "Nick", "Chris", "Peter"];
      var index;
      for( var i = -10; i < 10; i++ ){
        index = ((i % characters.length) + characters.length) % characters.length;
        console.log(i + " > " + index + " = " + characters[index]);
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-28
        • 1970-01-01
        相关资源
        最近更新 更多