Волновая матрица

Дан матрица A. Нужно получить новый массив, элементы которой будут упорядоченни волновым принципом.

Например

A = [
     [1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]
]

мы получим

[
[3, 6, 9],
[8, 5, 2],
[1, 4, 7]
]

function WavePrint(arr) {
let matrix = [];
let i;
let j = arr.length - 1;
let wave = 1;

while (j >= 0) {

    if (wave == 1) {
        for (i = 0; i < arr.length; i++)
            matrix.push(arr[i][j]);

        wave = 0;
        j--;
    } else {
        for (i = arr.length - 1; i >= 0; i--)
            matrix.push(arr[i][j]);

        wave = 1;
        j--;
    }
}
return matrix;

}

console.log(WavePrint([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]

])); // [[3,6,9], [4,5,6], [7,8,9]];

console.log(WavePrint([
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]

])); // [[1,1,1], [1,1,1], [1,1,1]];

console.log(WavePrint([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16],
])); // [[4, 8, 12, 16],[15, 11, 7, 3],[2, 6, 10, 14],[13, 9, 5, 1]];

console.log(WavePrint([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]

])); // [[0,0,1], [0,1,0], [1,0,0]];


Поможете верно решить задачу ?

Опиши что значит “волновой принцип”. Из данных это не очевидно. Код я так понял, подход к решению. Напиши почему он не подходит?

matrix-reverse-wave-form

Нужно чтобы вывел например
console.log(WavePrint([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]

])); // [[0,0,1], [0,1,0], [1,0,0]];

А у меня получается одномерный массив [0,0,1, 0,1,0, 1,0,0]
не знаю как сделать push в пустую матрицу чтобы при return как ответ получил матрицу!

Варианта без переделывания твоего алгоритма - “нарезать” на подмассива одномерный массив:

Пересмотри названия переменных типа matrix, они теряют свою суть с таким подходом.

Спасибо большое Дмитрий