我必须能够前后移动数组。永无止境,而且没有超出范围的索引异常(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
作为参数来为move
和step
使用单个公式。
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>