2012-04-10 254 views
1

我在這一塊上撓頭。我試圖編寫一個函數,該函數採用數組arr和整數n,並輸出由原始數組的每個第n個元素(從索引0開始)組成的新數組,並在必要時返回到開頭到達了。重新排列數組中的每一個第n個元素

例如:

arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
n = 3 
output = [0, 3, 6, 9, 1, 4, 7, 2, 5, 8] 

或者:

arr = [0, 1, 2, 3, 4, 5, 6] 
n = 2 
output = [0, 2, 4, 6, 1, 3, 5] 
+0

怎麼樣的情況下ARR = [0,1,2,3,4, 5] n = 3?那麼你只會部分覆蓋arr中的所有元素。 – 2012-04-10 13:25:18

+0

你想讓它們按值或索引排序嗎? – Phrogz 2012-04-10 13:28:28

+0

如果數組的長度和「n」的值的最大公分母大於1(即,如果它們不是相對的素數),會發生什麼?另外,你到目前爲止嘗試過什麼? – Pointy 2012-04-10 13:29:50

回答

4

這應該工作:

function get_n_elements(arr, n) { 
    if (n === 1) return arr.slice(); 
    var i, j, 
     len = arr.length, 
     ret = []; 
    for (i = 0; i < n; i++) { 
     for (j = i; j < len; j += n) { 
      ret.push(arr[ j ]); 
     } 
    } 
    return ret; 
} 
+0

這是一個非相對主要問題的好解決方案。爲'n == 1'添加檢查可能會很好。 – Pointy 2012-04-10 13:41:17

+0

良好的通話。添加! – 2012-04-10 13:43:39

相關問題