Estaba tratando de obtener una matriz con algunas matrices dentro, y cada una de esas matrices internas debería contener UNO de los n poderes de 2, no todos.
let n = 5; let arr = Array(n + 1).fill([]); const transform = function (el, i) { el.push(2 ** i); }; console.log(arr); // [Array(0), Array(0), Array(0), Array(0), Array(0), Array(0)] arr.map(transform); console.log(arr); //[Array(6), Array(6), Array(6), Array(6), Array(6), Array(6)] //was expecting //[[1], [2], [4], [8], [16], [32]]Cuando usan fill , comparten la misma instancia. Así que cambiar uno cambia todos los demás. Necesitas usar el map después de llenar
new Array(6).fill(null).map(() => []).map(transform)Puede ser más fácil usar un bucle for tradicional para lograr el resultado final. Usar map and transform es una forma más indirecta de hacer lo siguiente:
let n = 5; let arr = []; for (let i = 0; i <= n; i++) { arr.push([2**i]); } console.log(arr);Rellenar es solo configurar cada índice con una referencia a esa matriz. No está creando una nueva matriz en cada índice.
La forma más fácil de crear una matriz y llenarla con matrices vacías es con Array.from
const n = 5; const transform = (arr, index) => arr.push(2 ** index); const myArray = Array.from({length: n}, () => []); myArray.forEach(transform); console.log(myArray);