Многомерные массивы в JavaScript

В JavaScript нет отдельного типа данных для многомерных массивов. Обычно так называют массивы, внутри которых лежат другие массивы.

let numbers = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

Такую структуру удобно представлять как таблицу.

Что такое многомерный массив

Обычный массив хранит значения в один ряд.

let numbers = [1, 2, 3];

Многомерный массив хранит массивы внутри массива.

let numbers = [
  [1, 2, 3],
  [4, 5, 6],
];

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

Двумерный массив

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

let table = [
  ['Имя', 'Возраст', 'Город'],
  ['Анна', 25, 'Москва'],
  ['Олег', 31, 'Казань'],
];

Здесь внешний массив table содержит три внутренних массива. Каждый внутренний массив - это строка таблицы.

['Имя',  'Возраст', 'Город']
['Анна', 25,        'Москва']
['Олег', 31,        'Казань']

Получить элемент

Чтобы получить элемент из двумерного массива, используют два индекса.

let table = [
  ['Имя', 'Возраст', 'Город'],
  ['Анна', 25, 'Москва'],
  ['Олег', 31, 'Казань'],
];

console.log(table[1][0]); // Анна
console.log(table[1][2]); // Москва

Первый индекс выбирает внутренний массив, второй индекс выбирает элемент внутри него.

table[1][0]

В этой записи table[1] возвращает строку [‘Анна’, 25, ‘Москва’], а [0] берет из нее первый элемент.

Изменить элемент

Элемент внутри многомерного массива можно изменить так же, как и в обычном массиве, только индексов будет два.

let table = [
  ['Имя', 'Возраст', 'Город'],
  ['Анна', 25, 'Москва'],
  ['Олег', 31, 'Казань'],
];

table[2][2] = 'Самара';

console.log(table[2]); // ['Олег', 31, 'Самара']

Мы выбрали строку с индексом 2 и заменили в ней элемент с индексом 2.

Добавить строку

Так как внешний массив - обычный массив, в него можно добавлять новые внутренние массивы.

let table = [
  ['Имя', 'Возраст', 'Город'],
  ['Анна', 25, 'Москва'],
];

table.push(['Олег', 31, 'Казань']);

console.log(table);

Новая строка добавится в конец массива.

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

let row = ['Анна', 25];

row.push('Москва');

console.log(row); // ['Анна', 25, 'Москва']

Перебор многомерного массива

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

let numbers = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];

for (let row of numbers) {
  for (let number of row) {
    console.log(number);
  }
}

Внешний цикл перебирает строки, внутренний цикл перебирает элементы внутри каждой строки.

Если нужно работать именно со строкой целиком, достаточно одного цикла.

let table = [
  ['Анна', 25],
  ['Олег', 31],
];

for (let row of table) {
  console.log(row);
}

Неровные массивы

Внутренние массивы не обязаны быть одинаковой длины.

let groups = [
  ['Анна', 'Олег'],
  ['Мария'],
  ['Иван', 'Света', 'Петр'],
];

Такой массив корректен, но работать с ним нужно внимательнее: в разных строках будет разное количество элементов.

console.log(groups[0].length); // 2
console.log(groups[1].length); // 1
console.log(groups[2].length); // 3

Где использовать

Многомерные массивы используют, когда данные удобно представить в виде строк и столбцов.

  • таблица с данными;
  • игровое поле;
  • матрица чисел;
  • список групп, где в каждой группе свой список элементов.

Например, простое игровое поле можно записать так:

let board = [
  ['x', '', 'o'],
  ['', 'x', ''],
  ['o', '', 'x'],
];

console.log(board[0][0]); // x
console.log(board[2][2]); // x

Итого

Многомерный массив в JavaScript - это массив, внутри которого лежат другие массивы.

  • Двумерный массив удобно представлять как таблицу.
  • Первый индекс выбирает внутренний массив.
  • Второй индекс выбирает элемент внутри внутреннего массива.
  • array[row][column] - обычная запись для доступа к элементу.
  • Для перебора двумерного массива часто используют вложенный цикл.
  • Внутренние массивы могут быть разной длины, но с такими структурами легче запутаться.