Tal vez esto sea estúpido, pero mi estado es una matriz de objetos anidados: o Se ve de la siguiente manera:
const data = [ { randomid1: { name: 'lorem', latinName: 'ipsem', }, }, { randomid2: { name: 'lorem2', latinName: 'ipsem2', }, }, ]Necesito actualizar esta matriz con un nuevo nombre y/o nombre latino para uno de los elementos (digamos randomid1.name.
He estado luchando con la difusión, etc., pero sigo recibiendo errores. Ahora estoy tratando de mapear algo, pero esto tampoco funcionará. ¿Cualquiera?
Puede verificar si la matriz contiene un determinado elemento usando Array#find y Object#hasOwnProperty :
const data = [ { randomid1: { name: 'lorem', latinName: 'ipsem' } }, { randomid2: { name: 'lorem2', latinName: 'ipsem2' } } ], id = 'randomid2'; const elem = data.find(e => e.hasOwnProperty(id)); if(elem) { elem[id].name = 'new name'; } console.log(data);Creo que la solución ya proporcionada es mejor, pero si desea saber cómo podría ser posible con el mapa, aquí hay una forma de hacerlo:
const data = [ { randomid1: { name: 'lorem', latinName: 'ipsem' } }, { randomid2: { name: 'lorem2', latinName: 'ipsem2' } } ]; const id = 'randomid2'; const newdata2 = data.map((elt) => { if (elt[id]) { return {[id] : {...elt[id], name: "new Name"}}; } return elt; }); console.log(newdata2)Yo haría esto:
// will iterate on all the top level objects for (const itemWrapper of data) { // will iterate just once for (const item of Object.values(itemWrapper)) { if (item.name = 'whatever') { // update item } } }Puede mover esta función y regresar cuando se haya encontrado el elemento para un mejor rendimiento.
PD: la estructura de datos parece un poco difícil de usar, si puede cambiarla a algo que esté indexado por lo que está buscando, sería genial.