Как создать пустой двумерный массив (в одну строку)
Array.from(Array(2), () => new Array(4))
2 и 4 - первое и второе измерения соответственно.
Мы используем Array.from
, который может принимать массивоподобный параметр и необязательное отображение для каждого из элементов.
Array.from (arrayLike [, mapFn [, thisArg]])
var arr = Array.from(Array(2), () => new Array(4));
arr[0][0] = 'foo';
console.info(arr);
Тот же трюк можно использовать для Создание массива JavaScript, содержащего 1 ... N
В качестве альтернативы (но более неэффективно 12% с n = 10,000
)
Array(2).fill(null).map(() => Array(4))
Снижение производительности связано с тем, что мы должны инициализировать первые значения измерений для запуска .map
. Помните, что Array
не будет распределять позиции до тех пор, пока вы не сделаете заказ через .fill
или прямое присвоение значения.
var arr = Array(2).fill(null).map(() => Array(4));
arr[0][0] = 'foo';
console.info(arr);
Последующие действия
Вот метод, который кажется правильным, , но имеет проблемы .
Array(2).fill(Array(4)); // BAD! Rows are copied by reference
Несмотря на то, что он возвращает желаемый двумерный массив ([ [ <4 empty items> ], [ <4 empty items> ] ]
), есть загвоздка: массивы первого измерения были скопированы по ссылке. Это означает, что arr[0][0] = 'foo'
фактически изменит две строки вместо одной.
var arr = Array(2).fill(Array(4));
arr[0][0] = 'foo';
console.info(arr);
console.info(arr[0][0], arr[1][0]);