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

0

108
Views
Javascript fusiona algunas propiedades de 2 matrices

Tengo 2 matrices con objetos dentro de ellas:

 names = [ { "name": "B" }, { "name": "C" }, { "name": "D" }, { "name": "B" }, { "name": "A" } ] sections = [ { "id": 3638, "name": "B", "type": "PANEL", "parentSectionId": 3635, "order": 1, "page": "595" }, { "id": 3658, "name": "C", "type": "PANEL", "parentSectionId": 3635, "order": 2, "page": "595" }, { "id": 3659, "name": "D", "type": "PANEL", "parentSectionId": 3635, "order": 3, "page": "595" }, { "id": 3636, "name": "A", "type": "PANEL", "parentSectionId": 3635, "order": 4, "page": "595" }, { "id": 3661, "name": "B", "type": "PANEL", "parentSectionId": 3635, "order": 5, "page": "595" } ]

Necesito fusionar algunas propiedades de la matriz de secciones dentro de la matriz de nombres. Las propiedades a fusionar son: id y order.

El problema es con la identificación. Debido a que hay un nombre duplicado: 'B', la identificación se está duplicando.

Intenté muchas cosas, pero fallan porque pone el mismo ID 3638 en ambos nombres duplicados: 'B'.

Aquí está el resultado final:

 section {id: 3638, name: 'B', order: 1, size: undefined} section {id: 3658, name: 'C', order: 2, size: undefined} section {id: 3659, name: 'D', order: 3, size: undefined} section {id: 3638, name: 'B', order: 4, size: undefined} section {id: 3636, name: 'A', order: 5, size: undefined}

Y aquí mi último intento de código:

 const childrens = names.map((c, i) => ({ ...c, id: this.sections.find((s) => s.name === c.name).id, order: i + 1, }));
over 3 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Creo que ibas en la dirección correcta.

Para una fusión completa, use:

 let children = names.map((name, index) => { return({ order: index +1, name: name.name, ...sections[index] }) })

Para fusión parcial:

 let children = names.map((name, index) => { return({ name: name.name, order: index+1, id: sections[index].id }) })

Creo que no necesitas .find() y solo usas índices

over 3 years ago · Juan Pablo Isaza Report

0

Por lo que entendí, este código conservará el orden de los names duplicados (es una versión sin formato para una prueba de concepto)

 merged = [] visited = [] for (let i=0; i<names.length; i++) { for (let j=0; j<sections.length; j++) { if ((names[i].name === sections[j].name) && !visited.find(e => e === sections[j].id) ) { const obj = {...names[i]} obj['order'] = sections[j].order obj['id'] = sections[j].id merged.push(obj) visited.push(sections[j].id) continue } } } console.log(merged)

producción:

 [ { name: 'B', order: 1, id: 3638 }, { name: 'B', order: 5, id: 3661 }, { name: 'C', order: 2, id: 3658 }, { name: 'D', order: 3, id: 3659 }, { name: 'A', order: 4, id: 3636 } ]
over 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

Show me some job opportunities
There's an error!