Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
const matrix = new Array(5).fill(
new Array(5).fill()
)По спеке вроде не надо нью у Array конструктора — поведение одинаковое — что без, что с.
Еще проще:
[...Array(5)].fill([...Array(5)])
Ага, согласен, ну тогда:
[...Array(5)].map(() => [...Array(5)])Array(...Array(5)).map(() => Array(...Array(5)));Array.from({length: 5}, () => Array.from({length: 5}))
Прост для полноты положу тут, как красиво создавать заполненные (неразрежённые) массивы без грязных хаков с апплаями:
const matrix = new Array(5).fill( new Array(5).fill() )

const matrix = Array(5).fill().map(
() => Array(5).fill()
)Прост для полноты положу тут, как красиво создавать заполненные (неразрежённые) массивы без грязных хаков с апплаями:
const matrix = new Array(5).fill( new Array(5).fill() )
const arr = new Array(5) создаёт массив без элементов, но с заданной длиной.const arr = [];
arr.length = 5;так тоже будет ожидаемый результат:
const matrix = Array.from(Array(5), () => Array(5).fill())
Настольные
Возможность Chrome Firefox (Gecko) Internet Explorer Opera Safari
Базовая поддержка 45 32 (32) Нет Нет 9.0
Мобильные
Возможность Android Chrome для Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Базовая поддержка Нет Нет 32.0 (32) Нет Нет Нет
let arr = new Array(5).map(function() { return new Array(5); });var ar = new Array(5);ar[2] = void 0; ar.map((v,i) => console.log(v,i)) // undefined 2
new Array(5).fill(void 0).map(() => new Array(5));
/*
[…]
0: Array(5) [ <5 empty slots> ]
1: Array(5) [ <5 empty slots> ]
2: Array(5) [ <5 empty slots> ]
3: Array(5) [ <5 empty slots> ]
4: Array(5) [ <5 empty slots> ]
*//*
[…]
0: Array(5) [ undefined, undefined, undefined, … ]
1: Array(5) [ undefined, undefined, undefined, … ]
2: Array(5) [ undefined, undefined, undefined, … ]
3: Array(5) [ undefined, undefined, undefined, … ]
4: Array(5) [ undefined, undefined, undefined, … ]
*/new Array(5).fill(void 0).map(() => new Array(5).fill(void 0));или, еще проще:new Array(5).fill().map(() => new Array(5).fill());Но всё же тащить void 0 в продакшн лучше не стоит :)
А зачем изначально инициализировать массив undefined через fill, и уже только потом использовать map что бы создать новые массивы?
Мне кажется код станет лучше если написать:
new Array(5).fill(new Array(5).fill());Зачем в 2019 писать void 0?
const matrix = new Array(5).fill(
new Array(5).fill()
)или в такой форме[...Array(5)].fill([...Array(5)])const matrix = [...Array(5)].fill([...Array(5)]);
matrix[1][2] = 42;
console.log(matrix);
/*
(5) […]
0: Array(5) [ undefined, undefined, 42, … ]
1: Array(5) [ undefined, undefined, 42, … ]
2: Array(5) [ undefined, undefined, 42, … ]
3: Array(5) [ undefined, undefined, 42, … ]
4: Array(5) [ undefined, undefined, 42, … ]
length: 5
*/arr[1][2] = 42;const matrix = [...Array(5)].fill({test:""});
console.log(matrix);
/*
(5) […]
0: Object { test: "" }
1: Object { test: "" }
2: Object { test: "" }
3: Object { test: "" }
4: Object { test: "" }
length: 5
*/
matrix[0].test = 42;
console.log(matrix);
/*
(5) […]
0: Object { test: 42 }
1: Object { test: 42 }
2: Object { test: 42 }
3: Object { test: 42 }
4: Object { test: 42 }
length: 5
*/const matrix = Array.from(Array(5), () => Array(5).fill())
Defined or Undefined? Нюансы создания массивов в JavaScript