Двумерные массивы в JavaScript (Node.js): подробное руководство
Двумерные массивы в JavaScript
Что такое двумерный массив?
Представь себе шахматную доску или кинозал с рядами и местами. У каждого места есть два адреса: номер ряда и номер места в этом ряду.
В программировании такие таблицы называются двумерными массивами (или матрицами). Это массив, внутри которого находятся другие массивы.
Двумерные массивы помогают хранить данные, которые удобно представлять в виде таблицы: расписание уроков, карту острова с сокровищами, результаты игр или статистику постов в соцсетях.
Как создать двумерный массив
Самый простой способ — создать массив, внутри которого перечислить другие массивы:
// Создаём таблицу 3 ряда по 4 места
let кинозал = [
[1, 2, 3, 4], // первый ряд
[5, 6, 7, 8], // второй ряд
[9, 10, 11, 12] // третий ряд
];
Как обратиться к элементу
Чтобы получить элемент из таблицы, нужно указать два индекса: сначала номер строки (ряда), потом номер столбца (места).
Важно: счёт начинается с нуля!
let кинозал = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
];
console.log(кинозал[0][0]); // 1 — первый ряд, первое место
console.log(кинозал[1][2]); // 7 — второй ряд, третье место
console.log(кинозал[2][3]); // 12 — третий ряд, четвёртое место
Как изменить элемент
Просто присваиваем новое значение по нужным индексам:
let кинозал = [
[1, 2, 3],
[4, 5, 6]
];
кинозал[0][2] = 99; // Меняем третий элемент в первом ряду
console.log(кинозал[0]); // [1, 2, 99]
Как заполнить массив с клавиатуры
Часто нужно создать массив, размер которого задаёт пользователь. Для этого используем циклы:
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
let rows = 2;
let cols = 3;
let массив = [];
// Заполняем массив вручную для примера
for (let i = 0; i < rows; i++) {
массив[i] = [];
for (let j = 0; j < cols; j++) {
массив[i][j] = (i + 1) * 10 + (j + 1); // Просто пример чисел
}
}
console.log(массив);
// Вывод: [ [ 11, 12, 13 ], [ 21, 22, 23 ] ]
Как пройти по всем элементам (обход)
Используем вложенные циклы — один для строк, другой для столбцов:
let таблица = [
[1, 2, 3],
[4, 5, 6]
];
for (let i = 0; i < таблица.length; i++) {
for (let j = 0; j < таблица[i].length; j++) {
console.log(`Элемент [${i}][${j}] = ${таблица[i][j]}`);
}
}
Разбор типичных задач
Задача 1: Создание схемы кинозала
Нужно создать таблицу, где каждый элемент — это номер места. Пользователь вводит количество рядов и мест в ряду.
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question('Введите кол-во рядов: ', (rows) => {
rl.question('Введите кол-во мест в ряду: ', (cols) => {
rows = Number(rows);
cols = Number(cols);
let схема = [];
for (let i = 0; i < rows; i++) {
схема[i] = [];
for (let j = 0; j < cols; j++) {
схема[i][j] = `Р${i+1}М${j+1}`;
}
}
console.log('Схема зала:');
for (let i = 0; i < rows; i++) {
console.log(схема[i].join(' | '));
}
rl.close();
});
});
Задача 2: Поиск максимального элемента
Найти самое большое число в таблице (например, магнитуду землетрясения).
let данные = [
[4.5, 3.2],
[5.1, 2.8]
];
let максимум = данные[0][0];
for (let i = 0; i < данные.length; i++) {
for (let j = 0; j < данные[i].length; j++) {
if (данные[i][j] > максимум) {
максимум = данные[i][j];
}
}
}
console.log(`Максимальная магнитуда: ${максимум}`); // 5.1
Задача 3: Замена элемента по условию
На складе нужно заменить все товары с количеством 0 на значение 1 (добавили товар).
let склад = [
[5, 0, 3],
[0, 8, 2],
[1, 0, 6]
];
for (let i = 0; i < склад.length; i++) {
for (let j = 0; j < склад[i].length; j++) {
if (склад[i][j] === 0) {
склад[i][j] = 1;
}
}
}
console.log(склад);
// [ [5, 1, 3], [1, 8, 2], [1, 1, 6] ]
Частые ошибки новичков
- Путают индексы: первый индекс — строка, второй — столбец.
массив[строка][столбец] - Забывают, что счёт с нуля: первый элемент имеет индекс 0, а не 1.
- Не создают внутренний массив:
массив[i] = []нужно писать обязательно, иначе будет ошибка. - Путают длину строк и столбцов:
массив.length— количество строк,массив[0].length— количество столбцов. - Выход за границы массива: если массив размером 3x4, то индексы строк — 0,1,2, а столбцов — 0,1,2,3.
Итоговый пример: карта острова Капитана Сильвера
У нас есть карта 3x3. Символ 'X' — это сокровище, 'O' — пусто. Нужно найти координаты сокровища.
let карта = [
['O', 'O', 'X'],
['O', 'O', 'O'],
['O', 'O', 'O']
];
let найдено = false;
for (let i = 0; i < карта.length; i++) {
for (let j = 0; j < карта[i].length; j++) {
if (карта[i][j] === 'X') {
console.log(`Сокровище найдено! Ряд ${i+1}, место ${j+1}`);
найдено = true;
}
}
}
if (!найдено) {
console.log('Сокровище не найдено :(');
}
Почему это важно?
Двумерные массивы — это основа для работы с таблицами, изображениями (каждый пиксель — это элемент), играми (карта, поле боя), базами данных и многим другим. Научившись работать с ними, ты сможешь решать настоящие задачи из реального программирования!