Ваш вопрос не соответствует коду, который вы пробовали.Кажется, вы хотите конвертировать одномерный массив в 2D массив.Ваш код в порядке.Но проблема в том, что Math.sqrt(A.length);
может возвращать float, а i * rows + j
станет float, а массив не имеет индексов с плавающей точкой .Просто используйте Math.ceil()
, чтобы исправить
function create2Darray(A) {
var columns = [];
var rows = Math.ceil(Math.sqrt(A.length));
for (var i = 0; i < rows; i++) {
columns[i] = [];
for (var j = 0; j < rows; j++) {
columns[i][j] = A[i * rows + j];
}
}
return columns;
}
console.log(create2Darray([1,2,3,4,5,6,7,8]))
Следующие два решения предназначены для функции, которая принимает длину и ширину.
function array(l,w){
let res = [];
for(let i = 0; i < l;i++){
res[i] = [];
for(let j = 0; j < w; j++){
res[i][j] = (w * i) + j
}
}
return res;
}
console.log(JSON.strigify(array(3,2)))
А на вкладыше можно сделать с помощью вложенного map()
const array = (l,w) => [...Array(l)].map((x,i) => [...Array(w)].map((x,j) => (i*w) + j))
console.log(JSON.stringify(array(3,2)))