Вы можете использовать функцию Array.prototype.reduce
, чтобы сделать это в одной строке.
Стиль ECMAScript 6:
myArr.reduce((rows, key, index) => (index % 3 == 0 ? rows.push([key])
: rows[rows.length-1].push(key)) && rows, []);
«Нормальный» JavaScript:
myArr.reduce(function (rows, key, index) {
return (index % 3 == 0 ? rows.push([key])
: rows[rows.length-1].push(key)) && rows;
}, []);
Вы можете изменить 3 на любое желаемое количество столбцов, или, что еще лучше, поместить его в функцию многократного использования:
Стиль ECMAScript 6:
const toMatrix = (arr, width) =>
arr.reduce((rows, key, index) => (index % width == 0 ? rows.push([key])
: rows[rows.length-1].push(key)) && rows, []);
«Нормальный» JavaScript:
function toMatrix(arr, width) {
return arr.reduce(function (rows, key, index) {
return (index % width == 0 ? rows.push([key])
: rows[rows.length-1].push(key)) && rows;
}, []);
}