Сортировка матрицы в нужном порядке

Делаю тестовые задания перед началом курсов. Попалась такая задача: есть матрица, причем может быть любого размера, например:

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

Ее нужно отсортировать в такой массив:

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

Ответы (1 шт):

Автор решения: entithat

Towel sort algorithm

Изначально это была не совсем сортировка. Скорее, "укладка полотенцем" - т.е. когда у каждого последующего элемента матрицы порядок в массиве менялся на обратный:

const arr = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ], [ 10, 12, 11 ] ];

console.log(
  arr.reduce((acc, cur, i) => {
    return acc.concat((!(i % 2) ? cur : cur.reverse()));
  }, [])
);

Дальнейшее развитие предполагает дополнительную сортировку значений в самих массивах, а не просто реверс порядка элементов:

const arr = [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ], [ 10, 12, 11 ] ];

console.log(
  arr.reduce((acc, cur, i) => {
    cur.sort((a, b) => !(i & 1) ? a - b : b - a).map(e => acc.push(e));
    return acc;
  }, [])
);

Отличия в вариантах можно видеть на примере последнего элемента матрицы.

→ Ссылка