Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

133
Views
Duplique un elemento en una matriz basándose en los subelementos adjuntos a una de las claves de ese elemento en JavaScript

Tengo una matriz de objetos que se ve así

 {name:"name1", phoneNumbers:[{"home":"0700 999999"}, {"mobile":"0700 999998"}]}, {name:"name2", phoneNumbers:[{"home":"0700 999991"}, {"mobile":"0700 999995"}, fax:"48289299200"]}, {name:"name3", phoneNumbers:[{"home":"0700 999992"}, {"mobile":"0700 999988"}]} ]

Lo que quiero lograr es algo como esto.

 {name:"name1", phoneNumbers:[{"home":"0700 999999"}]}, {name:"name1", phoneNumbers:[{"mobile":"0700 999998"}]}, {name:"name2", phoneNumbers:[{"home":"0700 999991"}]}, {name:"name2", phoneNumbers:[{"mobile":"0700 999995"}]}, {name:"name2", phoneNumbers:[{fax:"48289299200"}]}, ... ]

De esta manera, cada nombre aparecerá nuevamente con cada uno de los medios de contacto adjuntos.

Me acerqué de esta manera y me resultó difícil lograr que la solución funcionara, ya que el ciclo externo no espera a que el ciclo interno se ejecute de forma exhaustiva antes de poder continuar con el siguiente índice:

 const doSomeRecursion=(arr, i, result)=>{ for(let j=0; j<arr[i]["phoneNumbers"].length; j++){ arr[i]["phoneNumbers"]=[arr[i]["phoneNumbers"][j]] result.push(arr[i]) } } const getAllContacts=(contacts)=>{ const reconstructedContacts=[] for(let i=0; i<contacts.length; i++){ doSomeRecursion(contacts, i, reconstructedContacts) } return reconstructedContacts }

En primer lugar, este método debería darme el resultado deseado, pero no estoy seguro de por qué no. También creo que mi solución puede no ser la mejor manera de hacerlo y me encantaría saber cómo abordarían esto.

Editar: gracias, @TJ Crowder, corregí la pregunta y la envolví en una función.

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

El bloque de código inicial en su pregunta tiene múltiples errores de sintaxis, por lo que es difícil estar seguro de cuál es su estructura inicial, pero haciendo conjeturas razonables, no hay necesidad de recursividad aquí, solo bucles anidados:

 const result = []; for (const {name, phoneNumbers} of original) { for (const number of phoneNumbers) { result.push({name, phoneNumbers: number}); } }

Ejemplo en vivo:

 const original = [ { name: "name1", phoneNumbers: [ { "home": "0700 999999" }, { "mobile": "0700 999998" } ] }, { name: "name2", phoneNumbers: [ { "home": "0700 999991" }, { "mobile": "0700 999995" }, {fax: "48289299200"} ] }, { name: "name3", phoneNumbers: [ { "home": "0700 999992" }, { "mobile": "0700 999988" } ] } ]; const result = []; for (const {name, phoneNumbers} of original) { for (const number of phoneNumbers) { result.push({name, phoneNumbers: number}); } } console.log(JSON.stringify(result, null, 4));

about 4 years ago · Juan Pablo Isaza Report

0

También puede lograr esto usando una combinación de flatMap() y map()

 const data = [ {name:"name1", phoneNumbers:[{"home":"0700 999999"}, {"mobile":"0700 999998"}]}, {name:"name2", phoneNumbers:[{"home":"0700 999991"}, {"mobile":"0700 999995"}, {"fax":"48289299200"}]}, {name:"name3", phoneNumbers:[{"home":"0700 999992"}, {"mobile":"0700 999988"}]} ]; const result = data.flatMap((n) => { return n.phoneNumbers.map((pn) => { return { name: n.name, phoneNumbers: [pn] } }); }); console.log(result);

about 4 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 Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!