2012-04-10 260 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

相关问题