我有一個長度為n的數組,我想生成一個新數組作為其索引列表,以便索引被“條帶”成塊。我所說的“條帶化”是指我們將以增量方式多次從 AZ 向上移動索引,并保留模式化的順序。例如,假設我們的數組有 30 個元素,索引為 0-29。我希望能夠提供一個整數作為一個因素,說明我希望條紋如何“混合”;我希望索引重新排序到多少個塊中。因子 1(將索引重新排序為 1 個塊 - 顯然什么也沒有發生)[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29]因子 2(將索引重新排序為 2 個條帶塊)[0,2,4,6,8,10,12,14,16,18,20,22,24,26,28, 1,3,5,7,9,11,13,15,17,19,21,23,25,27,29]因子 4(重新排序為 4 個塊)[0,4,8,12,16,20,24,28, 1,5,9,13,17,21,25,29, 2,6,10,14,18,22,26, 3,7,11,15,19,23,27]因素7[0,7,14,21,28, 1,8,15,22,29, 2,9,16,23, 3,10,17,24, 4,11,18,25, 5,12,19,26, 6,13,20,27]我不需要對原始數組重新排序,甚至不需要完整地生成這個重新排序的列表 - 我只需要循環現有的數組項并計算出它們的索引將它們放在這個理論上的重新排序列表中的位置。顯然,該函數應該適用于任何長度的數組和任何塊因子(只要它是整數)。一個關鍵的事情是,如果 ,則塊長度將會不同n % f !== 0。以上面的因子 4 列表為例,其中有兩個包含 8 個索引的塊和兩個包含 7 個索引的塊。類似地,對于因子 7 列表,我們得到兩個包含 5 個索引的塊和五個包含 4 個索引的塊。我們可以很快地解決幾件事:const perGroup = arrayLength / blockSize;const largeGroupCount = arrayLength % blockSize;const indexThatSmallGroupsStartAt = largeGroupCount * Math.ceil(perGroup);問題是 -我如何從這一點到達完成的功能?我是其中的一部分,但我認為我把它過于復雜化了,需要一雙新的眼睛(或大腦)來幫助我完成它!for (i = 0; i < originalArray.length; i++){ const groupSize = i < indexThatSmallGroupsStartAt ? Math.ceil(perGroup) : Math.floor(perGroup); const newIndex = ???}我一直在嘗試計算出目前的組號以及新組中索引的位置,但我不完全確定其中之一或兩者都是必要的......(因此上面省略了這段代碼)我之所以將索引“條帶化”到像這樣不斷增加的組中,是因為它們將用于從光譜中提取顏色。因此,您可以想象每個組都將遍歷整個顏色光譜,但任何后續組中的每個元素都將從前一組中的元素原本所在的位置沿著光譜增量移動。我有一系列需要顏色的東西,以及一個已經存在的函數,可以從我的光譜中提取一系列顏色。因此,我想循環原始數組中的每個項目,并使用 newIndex 從顏色數組中獲取顏色。
查看完整描述