necesito actualizar la matriz de objetos basada en otra matriz en ES6. Ejemplo
let a = [ { id : 23, active :false, status:"" }, { id : 33, active :false, status:"" }, { id : 167, active :false, status:"" }, { id : 18, active :false, status:"" }, { id : 200, active :false, status:"" }, ]mi segunda matriz que contiene los objetos
let marked = [167,33,23];resultados esperados a continuación
let a = [ { id : 23, active :true, status:"updated"}, { id : 33, active :true, status:"updated" }, { id : 167, active :true, status:"updated" }, { id : 18, active :false, status:"" }, { id : 200, active :false, status:"" }, ]por favor, hágame saber cómo obtener el resultado esperado. ¿Tenemos otros métodos en lodash para esto?
No necesitas lodash, puedes hacer esto:
let a = [{ id: 23, active: false }, { id: 33, active: false }, { id: 167, active: false }, { id: 18, active: false }, { id: 2, active: false }, ] let marked = [167, 33, 23]; let result = a.map(x => ({ ...x, active: marked.includes(x.id) })) console.log(result) Puede hacer esto más rápido si revisa la matriz marked y almacena sus elementos en un objeto. Luego, durante el map , verificar si el elemento x.id está dentro del objeto será más rápido (frente a verificar dentro de la matriz). Pero en la práctica en la mayoría de los casos no deberías notar la diferencia.
Esto es realmente solo una extensión de la respuesta de @Giorgi Moniava ya que la pregunta se ha actualizado. Creo que deberías marcar su respuesta como aceptada. Básicamente, todo lo que necesita hacer es verificar si el valor de active es verdadero o falso. Si es cierto, establezca el estado en updated ; de lo contrario, establezca el estado en una cadena vacía.
let a = [ { id : 23, active :false, status:"" }, { id : 33, active :false, status:"" }, { id : 167, active :false, status:"" }, { id : 18, active :false, status:"" }, { id : 200, active :false, status:"" }, ] let marked = [167,33,23]; let result = a.map(obj => { const isActive = marked.includes(obj.id); const status = isActive ? 'updated' : ''; return { ...obj, active: isActive, status: status } }) console.log(result)Pruebe con esto, use la función de mapa con la función de inclusión. Espero que esta respuesta dé su resultado real. si no, coméntame, te daré otra respuesta.
const found = a.map(function(mapData){ (marked.includes(mapData.id)) ? mapData.active = true : ''; return mapData; })