• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

176
Views
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 3 years ago · Juan Pablo Isaza
3 answers
Answer question

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 3 years ago · Juan Pablo Isaza Report

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 3 years ago · Juan Pablo Isaza Report

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 3 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error