Как создать многомерный массив js
Перейти к содержимому

Как создать многомерный массив js

  • автор:

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

Элементы массива могут быть не только строками и числами, но и массивами. В этом случае у нас получится массив массивов или .

В следующем примере массив arr состоит из трех элементов, в свою очередь являющихся массивами:

let arr = [[‘a’, ‘b’, ‘c’], [‘d’, ‘e’, ‘f’], [‘g’, ‘h’, ‘i’]];

Перепишем в более понятном виде:

let arr = [ [‘a’, ‘b’, ‘c’], [‘d’, ‘e’, ‘f’], [‘g’, ‘h’, ‘i’], ];

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

Приведенный выше массив является двухмерным, так как внутри одного массива расположены другие подмассивы и уже в этих подмассивах нет других массивов.

Чтобы вывести какой-либо элемент из двухмерного массива следует писать уже не одну пару квадратных скобок, а две:

let arr = [ [‘a’, ‘b’, ‘c’], [‘d’, ‘e’, ‘f’], [‘g’, ‘h’, ‘i’], ]; console.log(arr[0][1]); // выведет ‘b’ console.log(arr[1][2]); // выведет ‘f’

Дан следующий массив:

let arr = [ [‘a’, ‘b’, ‘c’], [‘d’, ‘e’, ‘f’], [‘g’, ‘h’, ‘i’], [‘j’, ‘k’, ‘l’], ];

Выведите с его помощью элементы с текстом ‘l’ , ‘e’ , ‘g’ и ‘a’ .

Дан следующий массив:

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

Обращаясь к каждому элементу массива найдите сумму всех его элементов.

Заполнение многомерных массивов 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].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], ], ]

Как создать n-мерный (многомерный) массив на JavaScript?

как в JavaScript заносить массив в многомерный массив, без обертывания в кавычки? Т.е. есть массив — в него нужно засунуть еще 3 массива с 3мя елементами в каждом. В конечном счете мне нужно получить многомерный массив такого вида:

var big_array= [[2, 5, 7], [3, 1, 4], [6, 8, 9]]; 

Я пытался добавлять массивы через push и якобы эмулировать массивы.

big_array.push("["+var1+","+var2+","+var3+"]"); //это пример добавления первого массива с данными (2,5,7) Но результат получается вот такой, с кавычками: ["[2,5,7]"] //это big_array 

Когда должен быть:
Как это можно сделать?
Отслеживать
317 2 2 серебряных знака 26 26 бронзовых знаков
задан 8 апр 2012 в 12:14
Denis Masster Denis Masster
1,157 5 5 золотых знаков 23 23 серебряных знака 54 54 бронзовых знака
big_array.push(var1, var2, var3);
8 апр 2012 в 12:27
@alexlz — вы добавляете 3 элемента, ТСу нужно добавить массив с тремя элементами
8 апр 2012 в 12:29

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

big_array.push("["+var1+","+var2+","+var3+"]"); // LOL big_array.push([var1, var2 ,var3]);// не. 

Вы запихиваете строку и удивляетесь тому, что в массив добавляется именно строка? О_О

Отслеживать
ответ дан 8 апр 2012 в 12:17
user3545 user3545

А почему я получаю немного не то, что хочется? > big_array [ [ [ 2, 5, 7 ], [ 3, 1, 4 ], [ 6, 8, 9 ] ] ]

8 апр 2012 в 12:31
а.. строка.. точно) спасибо )
8 апр 2012 в 12:34

Значит вы что-то делаете не так, тут без вариантов. К тому-же я понятия не имею что именно вы хотите получить. PS: рискну предположить что вы тупо вызываете push не для того массива Если вы так и не разобрались — предоставьте код

8 апр 2012 в 12:34
Да нет, просто я var’ам присвоил одномерные массивы. Что и видно по результату.
8 апр 2012 в 12:41

ПРИМЕР СОЗДАНИЯ МАССИВА С ИСПОЛЬЗОВАНИЕМ КОНСТРУКТОРА ОБЪЕКТА Array:

var arr = new Array(3);//Создание массива на 3 элемента arr[0] = new Array(3); //вставл. в первый элемент массив на 3 элемента arr[1] = new Array(3); //вставл. в второй элемент массив на 3 элемента arr[2] = new Array(3); //вставл. в третий элемент массив на 3 элемента //. 

ПРИМЕР СОЗДАНИЯ МАССИВА С ИСПОЛЬЗОВАНИЕМ КВАДРАТНЫХ СКОБОК:

var arr = []; //Создание пустого массива arr[0] = []; //вставл. в первый элемент массив arr[1] = []; //вставл. в второй элемент массив arr[2] = []; //вставл. в третий элемент массив //. 

ПРИМЕЧАНИЕ: В JavaScript объекты Array являются динамическим, т.е. количество элементов может быть добавлено или сокращенно в любой момент времени выполнения программы. Исходя из этого вы можете добавить нужное количество элементов нужного типа в любой уровень многомерного массива, как в первом так и втором способе.

ПРИМЕР СОЗДАНИЯ МНОГОМЕРНОГО МАССИВА (10×10) С ИСПОЛЬЗОВАНИЕМ ЦИКЛА:

 var tаblе = new Array (10); // 10 строк таблицы for (var i=0; i < tаblе.length; i++) < tаblе[i] = new Array(10); // 10 столбцов >

Array.prototype.flat()

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020 .

Метод flat() возвращает новый массив, в котором все элементы вложенных подмассивов были рекурсивно «подняты» на указанный уровень depth.

Синтаксис

var newArray = arr.flat(depth);

Параметры

depth Необязательный

На сколько уровней вложенности уменьшается мерность исходного массива. По умолчанию 1.

Возвращаемое значение

Новый массив с объединёнными в него подмассивами.

Примеры

Упрощение вложенных массивов

var arr1 = [1, 2, [3, 4]]; arr1.flat(); // [1, 2, 3, 4] var arr2 = [1, 2, [3, 4, [5, 6]]]; arr2.flat(); // [1, 2, 3, 4, [5, 6]] var arr3 = [1, 2, [3, 4, [5, 6]]]; arr3.flat(2); // [1, 2, 3, 4, 5, 6] var arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]]; arr4.flat(Infinity); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

Упрощение и «дырки» в массивах

Метод flat удаляет пустые слоты из массива:

var arr4 = [1, 2, , 4, 5]; arr4.flat(); // [1, 2, 4, 5] 

Альтернативы

reduce и concat

var arr1 = [1, 2, [3, 4]]; arr1.flat(); // В одномерный массив arr1.reduce((acc, val) => acc.concat(val), []); // [1, 2, 3, 4] //или const flatSingle = (arr) => [].concat(. arr); 
// Для развёртывания многомерных массивов используем рекурсию, reduce и concat const arr = [1, 2, [3, 4, [5, 6]]]; function flatDeep(arr, d = 1)  return d > 0 ? arr.reduce( (acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), [], ) : arr.slice(); > flatDeep(arr, Infinity); // [1, 2, 3, 4, 5, 6] 
//не рекурсивное упрощение с использованием стэка var arr1 = [1, 2, 3, [1, 2, 3, 4, [2, 3, 4]]]; function flatten(input)  const stack = [. input]; const res = []; while (stack.length)  // забираем последнее значение const next = stack.pop(); if (Array.isArray(next))  // добавляем к массиву элементы не модифицируя исходное значение stack.push(. next); > else  res.push(next); > > //разворачиваем массив, чтобы восстановить порядок элементов return res.reverse(); > flatten(arr1); // [1, 2, 3, 1, 2, 3, 4, 2, 3, 4] 
//рекурсивно упрощаем массив function flatten(array)  var flattend = []; (function flat(array)  array.forEach(function (el)  if (Array.isArray(el)) flat(el); else flattend.push(el); >); >)(array); return flattend; > 

Спецификации

Specification
ECMAScript Language Specification
# sec-array.prototype.flat

Совместимость с браузерами

BCD tables only load in the browser

Смотрите также

  • Array.prototype.flatMap()
  • Array.prototype.map()
  • Array.prototype.reduce()
  • Array.prototype.concat()

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *