双向迭代范围

Den*_* O. 1 javascript arrays shorthand

在两个方向的某个范围内进行循环迭代是一项非常常见且轻松的任务:

var currentIndex = 0;
var range = ['a', 'b', 'c', 'd', 'e', 'f'];

function getNextItem(direction) {
    currentIndex += direction;
    if (currentIndex >= range.length) { currentIndex = 0; }
    if (currentIndex < 0) { currentIndex = range.length-1; }

    return range[currentIndex];
}        
// get next "right" item
console.log(getNextItem(1));

// get next "left" item
console.log(getNextItem(-1));
Run Code Online (Sandbox Code Playgroud)

上面的代码可以完美地工作,但是我花了大约一个小时试图摆脱双重if检查。

有没有没有办法解决?有点单线?

Cer*_*nce 5

要将两个ifs转换为一个无条件语句,可以将s添加range.lengthcurrentIndex,然后使用modulo:

var currentIndex = 0;
var range = ['a','b','c','d','e','f'];

function getNextItem(direction) {
    currentIndex = (currentIndex + direction + range.length) % range.length;
    return range[currentIndex];
}

// get next "right" item
console.log(getNextItem(1));
console.log(getNextItem(1));

// get next "left" item
console.log(getNextItem(-1));
console.log(getNextItem(-1));
console.log(getNextItem(-1));

console.log(getNextItem(4));
console.log(getNextItem(1));
console.log(getNextItem(1));
console.log(getNextItem(1));
Run Code Online (Sandbox Code Playgroud)