Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разложить массив спиралью (https://javascript.ru/forum/misc/77511-razlozhit-massiv-spiralyu.html)

galiog 15.05.2019 06:51

Разложить массив спиралью
 
Всем привет. Подскажите пожалуйста, как подкопаться к такой штуке:
Есть массив.
let array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];


Надо вывести его значения на экран в ряд, начиная из центра по спирали: влево - вниз - вправо - вверх и т.д.

Т.е. должно получиться 5,4,7,8,9,6,3,2,1,

Я начал пробегаться по нему, формировать один обычный массив, но понимаю что это привело меня не туда куда надо...
let array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
let newArray = [];

for(let i = 0; i < array.length; i++){
	for(let j=0; j<array[i].length; j++){
		newArray.push(array[i][j]);
}
}
console.log(newArray);


Подскажите, с какого конца зайти для решения этой задачки пожалуйста.

ksa 15.05.2019 07:57

Цитата:

Сообщение от galiog
с какого конца зайти для решения этой задачки

Предложу такой вариант...

var arr = [
	[1, 2, 3],
	[4, 5, 6],
	[7, 8, 9]
];
var i=1;
var j=1;
var dj=-1;
var a=[];
for (var k=0; k<9; k++) {
	a[a.length]=arr[i][j];
	j=j+dj;
	if (j<0) {
		j=0
		dj=1;
		i++;
	};
	if (j==3) {
		j--;
		i--;
		if (i<0) {
			i=0;
			j--;
			dj=-1;
		};
	};
} 
alert(a);

рони 15.05.2019 10:50

массив спиралью
 
galiog,
let array = [
        [1, 2, 3],
        [4, 5, 6],
        [7, 8, 9]
    ],
    [a, b, i, j, l] = [0, 1, 0, 0, 9],
    arr = [];
for (let k = 0; k < l; k++) {
    let v = array[i] && array[i][j];
    if (v && !arr.includes(v)) {
        arr.unshift(v);
    } else {
        k--;
        i -= a;
        j -= b;
        [a, b] = a ? [b, -a] : [b, a]
    };
    i += a;
    j += b;
}
console.log(arr)
alert(arr)


Часовой пояс GMT +3, время: 21:55.