重新排列数组中的每一个第n个元素
问题描述:
我在这一块上挠头。我试图编写一个函数,该函数采用数组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]
答
这应该工作:
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
怎么样的情况下ARR = [0,1,2,3,4, 5] n = 3?那么你只会部分覆盖arr中的所有元素。 – 2012-04-10 13:25:18
你想让它们按值或索引排序吗? – Phrogz 2012-04-10 13:28:28
如果数组的长度和“n”的值的最大公分母大于1(即,如果它们不是相对的素数),会发生什么?另外,你到目前为止尝试过什么? – Pointy 2012-04-10 13:29:50