Necesito crear varios objetos, y cada uno debe tener una identificación.
Todos ellos estarán dentro de un Array.
Entonces se verá así:
const array = [ { id: 1, bla: "bla" }, { id: 2, bla: "bla" }, { id: 3, bla: "bla" } ]mi pregunta es, ¿hay alguna manera de crear una función, devolverá un número que puedo poner dentro de esas identificaciones?
function makeArrayWithId(...objects) { return objects.map((o, i) => ({ id: i + 1, ...o })) } const arr = makeArrayWithId( { bla: "bla" }, { bla: "bla" }, { bla: "bla" }, ) console.log(arr)imprimirá:
[ { id: 1, bla: 'bla' }, { id: 2, bla: 'bla' }, { id: 3, bla: 'bla' } ]si ya tiene una matriz en la que cada objeto no tiene identificación, puede pasarla a esta función de esta manera:
let myArr = [ { bla: 'bla' }, { bla: 'bla' }, { bla: 'bla' }, ] myArrr = makeArrayWithId(...myArr) console.log(myArr)imprimirá:
[ { id: 1, bla: 'bla' }, { id: 2, bla: 'bla' }, { id: 3, bla: 'bla' } ]Es probable que desee lo que llamamos generadores/iteradores.
Un generador/iterador es una función que tiene un estado interno.
En js, se crea agregando un "*" junto a la "función" y usando la palabra clave "rendimiento" en lugar de "retorno" (ver https://developer.mozilla.org/en-US/docs/Web/JavaScript/ Referencia/Operadores/rendimiento ).
Cuando se llama al generador, guarda los argumentos que se le dieron y devuelve un iterador, en el que puede llamar a .next() para obtener el siguiente valor (tenga en cuenta que se devuelve un objeto con el atributo "valor").
function* idGenerator (startingIndex) { while (true){ //the iterator will keep his inner state startingIndex += 1; yield startingIndex; } }let array = [ { bla: "bla" }, { bla: "bla" }, { bla: "bla" } ] array = array.map((item, index) => Object.assign({}, item, { id: index + 1 }))Producción:
[ { bla: 'bla', id: 1 }, { bla: 'bla', id: 2 }, { bla: 'bla', id: 3 } ]