Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

208
Vistas
Agregar valor clave a una matriz de objetos si tiene el mismo valor clave

Estoy tratando de agregar una propiedad con un cierto valor a todos los objetos en una matriz, en función de un valor correspondiente en otra matriz.

 const array1 = [ { id: 1, date: '2022.05.01', name: 'john' }, { id: 2, date: '2022.05.01', name: 'sam' }, { id: 3, date: '2022.05.03', name: 'john' }, { id: 4, date: '2022.05.06', name: 'jack' }, ]

Esta matriz contiene las modificaciones requeridas que deben realizarse:

 const array2 = [ { name: 'john', isCanceled: true, }, { name: 'jack', isCanceled: false, }, { name: 'sam', isCanceled: false, }, ]

Si el nombre en el objeto dentro de array1 es john entonces isCanceled debe establecerse en true , pero si es jack o sam debe establecerse en false así:

 const resultArray = [ { id: 1, date: '2022.05.01', name: 'john', isCanceled: true, }, { id: 2, date: '2022.05.01', name: 'sam' isCanceled: false, }, { id: 3, date: '2022.05.03', name: 'john' isCanceled: true, }, { id: 4, date: '2022.05.06', name: 'jack' isCanceled: false, }, ];
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Cree un objeto de búsqueda de status que contenga el estado y asigne su matriz para incluir los valores coincidentes del objeto de búsqueda:

 const status = Object.fromEntries( array2.map(({name, isCanceled}) => [name, isCanceled]) ); const resultArray = array1.map(({id, date, name}) => ({ id, date, name, isCanceled: status[name] }));

Alternativamente, si solo desea modificar la array1 1 en lugar de crear una nueva matriz, el segundo paso se puede reemplazar con:

 array1.forEach(v => v.isCanceled = status[v.name]);

Fragmento completo:

 const array1 = [{ id: 1, date: '2022.05.01', name: 'john' }, { id: 2, date: '2022.05.01', name: 'sam' }, { id: 3, date: '2022.05.03', name: 'john' }, { id: 4, date: '2022.05.06', name: 'jack' }, ]; const array2 = [{ name: 'john', isCanceled: true, }, { name: 'jack', isCanceled: false, }, { name: 'sam', isCanceled: false, }, ]; const status = Object.fromEntries( array2.map(({name, isCanceled}) => [name, isCanceled]) ); const resultArray = array1.map(({id, date, name}) => ({ id, date, name, isCanceled: status[name] })); console.log(resultArray);

Si se pregunta por qué prefiero construir el objeto de búsqueda en lugar de usar find() dentro de la operación map() : en términos de complejidad, la tabla de búsqueda tiene una complejidad de O(1) , mientras que el enfoque find() es O( n) .

about 4 years ago · Juan Pablo Isaza Denunciar

0

puedes hacer algo como:

 const result = array1.map(person => { const lookPerson = array2.find(person2 => person2.name === person.name); return (lookPerson) ? { ...person, isCanceled: lookPerson.isCanceled } : person; });
  • combine array.map para transformar array1

  • use array.find para obtener la primera iteración de una persona similar entre array1 y array2

  • fusionar objeto con

     { ...person, isCanceled: lookPerson.isCanceled } 

 const array1 = [{ id: 1, date: '2022.05.01', name: 'john' }, { id: 2, date: '2022.05.01', name: 'sam' }, { id: 3, date: '2022.05.03', name: 'john' }, { id: 4, date: '2022.05.06', name: 'jack' }, ]; const array2 = [{ name: 'john', isCanceled: true, }, { name: 'jack', isCanceled: false, }, { name: 'sam', isCanceled: false, }, ]; const result = array1.map(person => { const lookPerson = array2.find(person2 => person2.name === person.name); return (lookPerson) ? { ...person, isCanceled: lookPerson.isCanceled } : person; }); console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede hacer esto más simplemente convirtiendo primero su array2 en un objeto y luego usando una búsqueda dentro de un map como este:

 const array1 = [{id:1,date:"2022.05.01",name:"john"},{id:2,date:"2022.05.01",name:"sam"},{id:3,date:"2022.05.03",name:"john"},{id:4,date:"2022.05.06",name:"jack"},]; const array2 = [{name:"john",isCanceled:true},{name:"jack",isCanceled:false},{name:"sam",isCanceled:false}]; const arrCancel = array2.reduce((a, { name, isCanceled }) => { a[name] = isCanceled; return a; }, {}); const resultArr = array1.map(e => { e.isCanceled = arrCancel[e.name]; return e; }); console.log(resultArr);
 .as-console-wrapper { max-height: 100% !important; top: auto; }

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda