簡體   English   中英

遞歸地從數組 Javascript 中獲取每個第 n 個元素

[英]Recursively get every nth element from array Javascript

我有一個 colors 數組,我需要遞歸地獲取每個第 n 個元素來生成圖例。 colors 陣列可能如下所示:

[
'red',
'dark_red',
'dark_dark_red',
'green',
'dark_green',
'dark_dark_green',
'blue',
'dark_blue',
'dark_dark_blue'
]

我有可變數量的圖例項目,我想為其生成 colors。 當以如下模式循環遍歷圖例項時,我希望能夠根據索引生成 colors:

1 - green
2 - blue
3 - dark_red
4 - dark_green
5 - dark_blue
6 - etc...

我怎么可能 go 關於這個? 我嘗試使用模數和雙循環語句,但無法正確生成 colors。

要獲得nthItems

 function nthItems(array, n){ const r = []; for(let i=n-1,l=array.length; i<l; i+=n){ r.push(array[i]); } return r; } const a = [ 'red', 'dark_red', 'dark_dark_red', 'green', 'dark_green', 'dark_dark_green', 'blue', 'dark_blue', 'dark_dark_blue' ]; console.log(nthItems(a, 2)); console.log(nthItems(a, 3));

StackSlave 的答案是最有效的方式,但如果你想要一種遞歸方式,你可以這樣做

 const a = [ 'red', 'dark_red', 'dark_dark_red', 'green', 'dark_green', 'dark_dark_green', 'blue', 'dark_blue', 'dark_dark_blue' ]; const nthItems = (array, n) => { const results = []; const addItem = index => { if (index < array.length) { results.push(array[index]); addItem(index + n); } }; addItem(0); return results; }; console.log(nthItems(a, 2)); console.log(nthItems(a, 3));

但這純粹是為了遞歸而遞歸的,當 for 循環可以執行時,它會不必要地向堆棧添加值。

暫無
暫無

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

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