如何通过我的阵列做这个"奇怪的"循环?

Ale*_*lex 8 javascript arrays

我需要以"怪异"的方式遍历一个简单的数组.

我的数组的长度总是奇数平方数.

假设长度为49.为了使它更清晰,我的元素是数组的索引.所以我有类似的东西:

myArray = [0, 1, 2, 3, 4 ... 47, 48]
Run Code Online (Sandbox Code Playgroud)

所以,你可以想象下面的方阵:

0   7   14  21  28  35  42
1   8   15  22  29  36  43
2   9   16  23  30  37  44
3   10  17  24  31  38  45
4   11  18  25  32  39  46
5   12  19  26  33  40  47
6   13  20  27  34  41  48
Run Code Online (Sandbox Code Playgroud)

我必须从这个矩阵的中心开始(即myArray[Math.floor(myArray.length / 2)])

在我的例子中: 24

然后我必须在左右数字之间交替,直到我通过所有行.

在我的例子中,对于第一次迭代: 17, 31, 10, 38, 3, 45

一旦完成一行,我在向上和向下的数字之间交替,重复给定行的左/右逻辑.

在我的例子中,myArray作为输入我应该按以下顺序循环:

24, 17, 31, 10, 38, 3, 45, 
23, 16, 30, 9, 37, 2, 44,
25, 18, 32, 11, 39, 4, 46,
22, 15, 29, 8, 36, 1, 43,
26, 19, 33, 12, 40, 5, 47,
21, 14, 28, 7, 35, 42, 0,
27, 20, 34, 13, 41, 6, 48
Run Code Online (Sandbox Code Playgroud)

你能帮我正确实现它吗?

这是我到目前为止所做的:https://jsfiddle.net/6qzkk2zx/

Nac*_*. S 1

我想我有:

https://jsfiddle.net/2dbj68t3/2/

var start = (array.length - 1) / 2;
var square = Math.sqrt(array.length);
newArray.push(array[start]);
for (j = 1; j <= Math.floor((square / 2)); j++) {
    newArray.push((array[start - (j * square)]));
    newArray.push((array[start + (j * square)]));
}
for (i = 1; i <= Math.floor((square / 2)); i++) {
    newArray.push((array[start - i]));
    for (j = 1; j <= Math.floor((square / 2)); j++) {
        newArray.push((array[start - i - (j * square)]));
        newArray.push((array[start - i + (j * square)]));
    }
    newArray.push((array[start + i]));
    for (j = 1; j <= Math.floor((square / 2)); j++) {
        newArray.push((array[start + i - (j * square)]));
        newArray.push((array[start + i + (j * square)]));
    }
}
Run Code Online (Sandbox Code Playgroud)