我必须能够前后移动数组。永无止境,而且没有超出范围的索引异常(exception)。

为了前进,我知道了使用模运算符的一种优雅方法。对于向后移动,我必须自己弄清楚一些东西。

这是我的解决方案:

const inc = document.getElementById("inc");
const dec = document.getElementById("dec");
const arr = ["One", "Two", "Three", "Four", "Five", "Six"];
let i = 0;

inc.addEventListener("click", () => {
  i = (i + 1) % arr.length;

  console.log(arr[i]);
});

dec.addEventListener("click", () => {
  i = i - 1;

  if (i === -1) {
    i = arr.length - 1;
  }

  console.log(arr[i]);
});
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>

<body>
  <button id="inc">Inc</button>
  <button id="dec">Dec</button>
</body>

</html>


有用。 但是,是否存在更优雅的解决方案?

这样一来,您就可以摆脱这种难看的if-check。

最佳答案

是的,您可以通过创建通用函数forwards并将backwards作为参数来为movestep使用单个公式。



let arr = ["One", "Two", "Three", "Four", "Five", "Six"] , i = 0
function move(step){
  i = (i + step + arr.length ) % arr.length;
  console.log(arr[i]);
}
<button id="inc" onclick="move(1)">Inc</button>
<button id="dec" onclick="move(-1)">Dec</button>

10-08 05:59