Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

212
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda