簡體   English   中英

如何基於起始索引在數組中循環/換行?

[英]How to loop through/wrap around an array based on starting index?

var ZODIAC = ["RAT", "OX", "TIGER", "RABBIT", "DRAGON", "SNAKE", "HORSE", "SHEEP", "MONKEY", "ROOSTER", "DOG", "PIG"];
var STARTING_ZODIAC = "MONKEY";

如何打印此數組中從Monkey開始到綿羊結束的所有元素?

您可以使用模運算符,以便您的索引變量在達到ZODIAC數組的長度時會回繞為0

 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]); } 

另一種方法是,以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)); 

6個答案,但沒有一個答案對我有用:

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

循環12次,並使用模運算符,以便我們可以計算4、5,... 10、11、0、1、2、3。

很容易,只需從數組的開始到結尾進行打印,然后從數組的開始一直打印到開始。

function printZodiacs(startingZodiac, zodiacs) {
  const startIndex = zodiacs.indexOf(startingZodiac);

  // start to end of array
  for (let i = startIndex; i < zodiacs.length; i++) {
    console.log(zodiacs[i]);
  }

  // beginning of array to to start
  for (let i = 0; i < startIndex; i++) {
    console.log(zodiacs[i]);
  }
}

printZodiacs(STARTING_ZODIAC, ZODIAC);

解決它的另一種有趣方式:

let doubleZodiac = ZODIAC.concat(ZODIAC);
let start = ZODIAC.indexOf(STARTING_ZODIAC);

for (let i = 0; i < ZODIAC.length; i++) {
  console.log(doubleZodiac[start + i]);
}

這會將數組的副本添加到末尾,然后僅從起始索引打印12。

在我看來,最直接的方法是一個do-while循環,從索引開始,然后進行包裝,直到回到該索引為止。 在這種情況下,可以使用do -block使事情變得簡單:

 const ZODIAC = ["RAT", "OX", "TIGER", "RABBIT", "DRAGON", "SNAKE", "HORSE", "SHEEP", "MONKEY", "ROOSTER", "DOG", "PIG"]; const STARTING_ZODIAC = "MONKEY"; let i = start_ndx = ZODIAC.indexOf(STARTING_ZODIAC); do { console.log(i, ZODIAC[i++]) i == ZODIAC.length && (i=0) } while (i!==start_ndx) 

評論:在我看來,大多數其他答案似乎都不必要地復雜(使用模),或者效率低下(復制值和新數組)。 從頭到尾都可以避免,在我看來這更容易維護

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM