如何根据起始索引循环/环绕数组?

AFe*_*ara 1 javascript arrays

var ZODIAC = ["RAT", "OX", "TIGER", "RABBIT", "DRAGON", "SNAKE", "HORSE", "SHEEP", "MONKEY", "ROOSTER", "DOG", "PIG"];
var STARTING_ZODIAC = "MONKEY";
Run Code Online (Sandbox Code Playgroud)

如何打印此数组中以猴子开头并以羊结尾的所有元素?

Ken*_*Y-N 6

6 个答案,但没有一个使用对我来说显而易见的解决方案:

for (let i = 0; i < ZODIAC.length; i++) {
   console.log(ZODIAC[(startIndex + i) % ZODIAC.length]);
}
Run Code Online (Sandbox Code Playgroud)

循环 12 次,并使用模运算符,这样我们就可以计算 4, 5, ... 10, 11, 0, 1, 2, 3。


Cer*_*nce 5

您可以使用模运算符,以便您的索引变量在0达到ZODIAC数组长度时环绕到:

const ZODIAC = ["RAT", "OX", "TIGER", "RABBIT", "DRAGON", "SNAKE", "HORSE", "SHEEP", "MONKEY", "ROOSTER", "DOG", "PIG"];
const STARTING_ZODIAC = "MONKEY";
const startIndex = ZODIAC.indexOf(STARTING_ZODIAC);

console.log(STARTING_ZODIAC);
for (let i = startIndex + 1; i !== startIndex; i = (i + 1) % ZODIAC.length) {
  console.log(ZODIAC[i]);
}
Run Code Online (Sandbox Code Playgroud)

另一种方法是slice先将数组的两个部分按正确的顺序排列:

const ZODIAC = ["RAT", "OX", "TIGER", "RABBIT", "DRAGON", "SNAKE", "HORSE", "SHEEP", "MONKEY", "ROOSTER", "DOG", "PIG"];
const STARTING_ZODIAC = "MONKEY";
const startIndex = ZODIAC.indexOf(STARTING_ZODIAC);

[
   ...ZODIAC.slice(startIndex),
   ...ZODIAC.slice(0, startIndex)
].forEach(str => console.log(str));
Run Code Online (Sandbox Code Playgroud)