JS Как из n-мерного массива сделать двумерный?
Подскажите, пожалуйста как из n-мерного массива сделать двумерный. Приведу пример
let bigArr = [
[
[ 'Ячейка 1-1' ],
[ 'Ячейка 1-2' ],
[ 'Ячейка 1-3' ],
],
[
[ 'Ячейка 2-1' ],
[ 'Ячейка 2-2' ],
[ 'Ячейка 2-3' ],
],
[
[ 'Ячейка 3-1' ],
[ 'Ячейка 3-2' ],
[ 'Ячейка 3-3' ],
],
];
let bigArr2 = [
[
[ 'Ячейка 1-1' ],
[ 'Ячейка 1-2' ],
[ 'Ячейка 1-3' ],
],
[
[ 'Ячейка 2-1' ],
[ 'Ячейка 2-3' ],
],
[
[ 'Ячейка 3-1' ],
[ 'Ячейка 3-2' ],
[ 'Ячейка 3-3' ],
],
];
let resultArr = [];
/*
[
[ 'Ячейка 1-1', 'Ячейка 2-1', 'Ячейка 3-1'],
[ 'Ячейка 1-2', 'Ячейка 2-2', 'Ячейка 3-2'],
[ 'Ячейка 1-3', 'Ячейка 2-3', 'Ячейка 3-3'],
];
*/
/* For second variant for bigArr2
[
[ 'Ячейка 1-1', 'Ячейка 2-1', 'Ячейка 3-1'],
[ 'Ячейка 1-2', 'empty', 'Ячейка 3-2'],
[ 'Ячейка 1-3', 'Ячейка 2-3', 'Ячейка 3-3'],
];
*/
Есть n-мерный массив, в котором 2-х уровней может быть очень много. Как его трансформировать в массив 2-го порядка ? resultArr
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Для удаления вложенности можно воспользоваться методом .flat.
Для получения ожидаемого результата, итоговую матрицу можно просто транспонировать, а именно поменять местами элементы A(i,j) и A(j,i)
Сделать это можно с помощью метода .map
let bigArr = [
[
['Ячейка 1-1'],
['Ячейка 1-2'],
['Ячейка 1-3'],
],
[
['Ячейка 2-1'],
['Ячейка 2-2'],
['Ячейка 2-3'],
],
[
['Ячейка 3-1'],
['Ячейка 3-2'],
['Ячейка 3-3'],
],
];
let resultArr = bigArr.map(a => a.flat()).map((r, i, a) => r.map((c, j) => a[j][i]));
console.log(resultArr);
/*
[
[ 'Ячейка 1-1', 'Ячейка 2-1', 'Ячейка 3-1'],
[ 'Ячейка 1-2', 'Ячейка 2-2', 'Ячейка 3-2'],
[ 'Ячейка 1-3', 'Ячейка 2-3', 'Ячейка 3-3'],
];
*/
В случае не квадратной матрицы, транспонирование стоит вынести в отдельную функцию
let bigArr = [
[
['Ячейка 1-1'],
['Ячейка 1-2'],
['Ячейка 1-3'],
],
[
['Ячейка 2-1'],
['Ячейка 2-2'],
['Ячейка 2-3'],
]
];
function transponse(m) {
var result = [];
for (var i = 0; i < m.length; i++) {
for (var j = 0; j < m[i].length; j++) {
if (!result[j]) result[j] = [];
result[j][i] = m[i][j];
}
}
return result;
}
let resultArr = bigArr.map(a => a.flat());
console.log(transponse(resultArr));
/*
[
[ 'Ячейка 1-1', 'Ячейка 2-1'],
[ 'Ячейка 1-2', 'Ячейка 2-2'],
[ 'Ячейка 1-3', 'Ячейка 2-3'],
];
*/