Как создать 2d-массив, используя цикл for в Javascript?

Мне нужно написать программу, которая создает массив 2d в переменных «числа» в строках (5) и столбцах (4). Элементы массива должны быть последовательными целыми числами, начиная с 1 и заканчивая 20. Я должен использовать цикл for.

[ 1, 2, 3, 4 ],
[ 5, 6, 7, 8 ],
[ 9, 10, 11, 12 ],
[ 13, 14, 15, 16 ],
[ 17, 18, 19, 20 ],

Итак, я придумал это:

const numbers = [];
const columns = 4;
const rows = 5;

for (let i = 0; i < rows; i++) {
    numbers [i] = [];
    for (let j = 0; j < columns; j++){
        numbers  [i][j] = j + 1;
    }
}
console.info(numbers); 

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

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

У вас есть идеи, как это исправить? Как сделать второй ряд, начиная с 5?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
33
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Похоже, во втором цикле вы должны сделать numbers [i][j] = j * i; вместо этого

Это была одна из моих первых идей по исправлению, но, к сожалению, она дала мне странный результат.

Jakub Skorus 29.03.2022 22:24

Каждый раз, когда внешний цикл for начинает новую итерацию, j сбрасывается обратно на 0, поэтому вы продолжаете получать строки, начинающиеся с 1.

Чтобы исправить это, вы можете объявить переменную вне цикла for, которая отслеживает текущее число, и использовать ее вместо j следующим образом:

const numbers = [];
const columns = 4;
const rows = 5;
let currNum = 0;

for (let i = 0; i < rows; i++) {
    numbers [i] = [];
    for (let j = 0; j < columns; j++){
        currNum++;
        numbers  [i][j] = currNum;
    }
}
console.info(numbers); 

Это интересное решение, оно работает как надо. В конце концов, я выбрал метод, предложенный @JoeyCarlisle;)

Jakub Skorus 29.03.2022 22:30

Безусловно, гораздо лучшее решение!

Aman 29.03.2022 23:03
Ответ принят как подходящий

Вот немного обновленного кода. Вам нужно добавить i*columns к каждому значению

const numbers = [];
const columns = 4;
const rows = 5;

for (let i = 0; i < rows; i++) {
    numbers[i] = [];
    for (let j = 0; j < columns; j++){
        numbers[i][j] = j + 1 + (i*columns);
    }
}
console.info(numbers); 

Да, вот оно! Спасибо за решение моей проблемы. Это ценный урок для меня ;)

Jakub Skorus 29.03.2022 22:27

Другие вопросы по теме