Заполнение многомерных массивов JavaScript

Пусть теперь мы хотим в цикле создать какой-нибудь многомерный массив с числами.

Например, вот такой двухмерный массив:

[[1, 2, 3], [1, 2, 3], [1, 2, 3]]

Решим поставленную задачу, применив два вложенных цикла. Внешний цикл будет создавать подмассивы, а внутренний - заполнять эти подмассивы числами:

let arr = []; for (let i = 0; i < 3; i++) { arr[i] = []; // создаем подмассив for (let j = 0; j < 3; j++) { arr[i][j] = j + 1; // заполняем подмассив числами } } console.log(arr);

Вместо обращения arr[i][j] можно использовать метод push:

let arr = []; for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++) { arr[i].push(j + 1); } } console.log(arr);

Сформируйте с помощью двух вложенных циклов следующий массив:

[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]

Сформируйте с помощью двух вложенных циклов следующий массив:

[['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x'], ['x', 'x', 'x', 'x']]

Сформируйте с помощью трех вложенных циклов следующий массив:

[ [ [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], ], [ [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], ], [ [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], ], ]

Потенциальная проблема

Давайте рассмотрим код, полученный нами выше:

let arr = []; for (let i = 0; i < 3; i++) { arr[i] = []; // обратите внимание на эту строчку for (let j = 0; j < 3; j++) { arr[i][j] = j + 1; } } console.log(arr);

В этом коде важное место занимает строчка arr[i] = []. Эта строчка предназначена для создания подмассива. Мы не можем опустить эту строчку, так как тогда во внутреннем цикле обращение arr[i][j] выдаст ошибку.

Почему: потому что arr[i] не будет являться массивом (а будет undefined), а мы будем обращаться к нему, как к массиву, пытаясь добавить в этот подмассив элемент, вот так: arr[i][j].

Такая же ошибка будет, если вместо arr[i][j] добавлять элемент через arr[i].push(j).

Автор следующего кода хотел сделать двухмерный массив:

let arr = []; for (let i = 0; i < 3; i++) { for (let j = 1; j <= 5; j++) { arr[i].push(j); } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать двухмерный массив:

let arr = []; for (let i = 0; i < 3; i++) { arr[i] = ''; for (let j = 1; j <= 5; j++) { arr[i].push(j); } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать двухмерный массив:

let arr = []; for (let i = 0; i < 3; i++) { arr[i]; for (let j = 1; j <= 5; j++) { arr[i].push(j); } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать двухмерный массив:

let arr = []; for (let i = 0; i < 3; i++) { arr[j] = []; for (let j = 1; j <= 5; j++) { arr[i].push(j); } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать двухмерный массив:

let arr; for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 0; j <= 5; j++) { arr[i][j] = j + 1; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать двухмерный массив:

let arr = []; for (let i = 0; i < 3; i++) { arr[i] == []; for (let j = 1; j <= 5; j++) { arr[i].push(j); } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать двухмерный массив:

let arr = []; for (let i = 0; i < 3; i++) { arr = []; for (let j = 1; j <= 5; j++) { arr[i].push(j); } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать двухмерный массив:

let arr = ''; for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 0; j <= 5; j++) { arr[i][j] = j; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать двухмерный массив:

let arr = []; for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 1; j <= 5; j++) { arr.push(j); } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать двухмерный массив:

let arr = []; for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 0; j <= 5; j++) { arr[j][i] = j; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать двухмерный массив:

for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 0; j <= 5; j++) { arr[i][j] = j; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Заполнение числами по порядку

В предыдущих примерах все числа в подмассивах были одинаковыми. Давайте теперь сделаем так, чтобы числа возрастали, вот так:

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

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

let arr = []; let k = 1; // счетчик for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++) { arr[i][j] = k; // записываем счетчик k++; // увеличиваем счетчик } } console.log(arr);

Можно уменьшить код, занеся определение счетчика в первый цикл, а k++ - во второй:

let arr = []; for (let i = 0, k = 1; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++, k++) { arr[i][j] = k; } } console.log(arr);

Можно также сделать увеличение счетчика после присваивания:

let arr = []; for (let i = 0, k = 1; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++) { arr[i][j] = k++; } } console.log(arr);

Обратите внимание на то, что в данном случае должно быть обязательно k++, а не ++k, так как второй вариант сначала выполнит увеличение счетчика, а уже потом запись в массив (то есть в результате массив начнется с двойки, а не с единицы, вот так: [[2, 3, 4], [5, 6, 7], [8, 9, 10]]).

Сформируйте с помощью двух вложенных циклов следующий массив:

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

Сформируйте с помощью двух вложенных циклов следующий массив:

[[2, 4, 6], [8, 10, 12], [14, 16, 18], [20, 22, 24]]

Сформируйте с помощью трех вложенных циклов следующий трехмерный массив:

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

Автор следующего кода хотел сделать массив [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:

let arr = []; for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++) { arr[i][j] = k; k++; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать массив [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:

let arr = []; let k = 1; for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++) { arr[i][j] = k; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать массив [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:

let arr = []; let k = 1; for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++) { arr[i][j] = k; k--; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать массив [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:

let arr = []; let k; for (let i = 0; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++) { arr[i][j] = k; k++; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать массив [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:

let arr = []; for (let i = 0, k = 1; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++) { arr[i][j] = k; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать массив [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:

let arr = []; for (let i = 0, k = 1; i < 3; i++) { arr[i] = []; for (let j = 0, k++; j < 3; j++) { arr[i][j] = k; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать массив [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:

let arr = []; for (let i = 0, k = 1; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++; k++) { arr[i][j] = k; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать массив [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:

let arr = []; for (let i = 0, k = 1; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; j++) { arr[i][j] = ++k; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать массив [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:

let arr = []; let k = 1; for (let i = 0; i < 3; i++) { arr[k] = []; for (let j = 0; j < 3; j++) { arr[i][j] = k; k++; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.

Автор следующего кода хотел сделать массив [[1, 2, 3], [4, 5, 6], [7, 8, 9]]:

let arr = []; for (let i = 0, k = 1; i < 3; i++) { arr[i] = []; for (let j = 0; j < 3; k++) { arr[i][j] = k; } } console.log(arr);

Написанный код, однако, не делает задуманного. Найдите и исправьте ошибку автора.