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

124
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 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