Tengo una matriz que contiene un montón de booleanos y una función que le agrega n nuevos booleanos. Todos ellos deben comenzar con su valor predeterminado, por lo que una forma sería
const array = []; function extendArrayBy(amountOfNewItems) { for (let i = 0; i < amountOfNewItems; i++) { array.push(false); } } extendArrayBy(3); console.log(array);pero hay una función Array.prototype.fill() que podría hacerlo "más elegante". Lo que probé:
let array = []; const amountOfNewItems = 3; array = array.fill(false, array.length, array.length + amountOfNewItems); console.log(array);Desafortunadamente, la matriz modificada no contiene los elementos nuevos. ¿Alguien sabe lo que me perdí?
Como ya se dijo en los comentarios. fill no agrega nuevos elementos.
El método
fill()cambia todos los elementos de una matriz a un valor estático, desde un índice inicial (0 predeterminado) hasta un índice final (array.length predeterminado). Devuelve la matriz modificada.
Puede cambiar .length antes de llamar a fill :
let array = [true, false, true]; const amountOfNewItems = 3; array.length = array.length + amountOfNewItems array = array.fill(false, array.length - amountOfNewItems, array.length); console.log(array);Prueba esto:
let amountOfNewItems = 3; let array = []; array = array.concat(Array(amountOfNewItems).fill(false)); console.log(array); let array2 = [1,2,3]; array2 = array2.concat(Array(amountOfNewItems).fill(false)); console.log(array2);Aquí hay una función que extiende una matriz con un valor dado por una cantidad dada.
let arr = ['A', 1, {k: 'v'}]; /** Extends an array with a given *** value at a given amount. * @param {Array} array * @param {Any} element * @param {Number} size * @return {Array} */ const extend = (array, element, size = 1) => { let extra = element == undefined ? null : element; const extArr = [...new Array(size)].map(e => extra); return [...array, ...extArr]; }; console.log(extend(arr, false, 7));