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

133
Vistas
JS. Cómo copiar un objeto de matriz por cada accesorio

Limitaciones:

  1. Estoy limitado a no usar la sintaxis ES6
  2. Necesito una forma de hacer esto sin conocer las propiedades exactas del objeto. Entonces, sin agregar manualmente la id y el name al presionar la matriz de desiredOutput , sino copiar todas las propiedades automáticamente.

Tengo: una matriz con un objeto que tiene múltiples props únicos

 var items = [ { id: 1, name: "item name", props: [ { propId: 1, propName: "name one" }, { propId: 2, propName: "name two" }, { propId: 3, propName: "name three" } ] } ];

Resultado deseado: una nueva matriz que contenga una copia del objeto original dentro de la matriz, por cada prop

 var desiredOutput = [ { id: 1, name: "item name", props: [ { propId: 1, propName: "name one" } ] }, { id: 1, name: "item name", props: [ { propId: 2, propName: "name two" } ] }, { id: 1, name: "item name", props: [ { propId: 3, propName: "name three" } ] } ];
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Lógica

  • Recorra las teclas de cada elemento en la matriz de elementos.
  • Compruebe si el nombre de la clave no es props .
  • Agregue la combinación de valor clave a un objeto, excepto para props clave
  • Recorra el nodo de props en cada objeto.
  • Agregue cada accesorio a la tecla de props y empújelo a la matriz final
  • Debe realizar una lógica de copia profunda aquí, ya que sigue actualizando el objeto pushong

 var items = [{ id: 1, name: "item name", props: [ { propId: 1, propName: "name one" }, { propId: 2, propName: "name two" }, { propId: 3, propName: "name three" } ] }]; var desiredOutput = []; for (var index = 0; index < items.length; index++) { var outputNode = {}; var entries = Object.entries(items[index]); for(var innerIndex = 0; innerIndex < entries.length; innerIndex++) { if(entries[innerIndex][0] !== 'props') { outputNode[entries[innerIndex][0]] = entries[innerIndex][1]; } } for(var innerIndex = 0; innerIndex < items[index].props.length; innerIndex++) { outputNode.props = [items[index].props[innerIndex]]; // This is mandatory to perform deep copy desiredOutput.push(JSON.parse(JSON.stringify(outputNode))); } } console.log(desiredOutput);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedes usar algo como esto:

 function copyProps(itemsArr) { var copy = []; var i = 0; itemsArr.forEach(function(item) { item.props.forEach(function(prop) { copy[i] = Object.assign({}, item); copy[i].props = [Object.assign({}, prop)]; i++; }); }); return copy; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

solo otra forma de obtener el resultado deseado con una copia profunda.

 var items = [{ id: 1, name: "item name", props: [{ propId: 1, propName: "name one" }, { propId: 2, propName: "name two" }, { propId: 3, propName: "name three" }] }]; var desiredOutput = []; function ExtractDataFromProp(jsObject, jsObjectPropKey) { if (Object.hasOwnProperty.call(jsObject, jsObjectPropKey)) { const propElementValue = jsObject[jsObjectPropKey]; if (typeof propElementValue != "object") { const propString = `"${jsObjectPropKey}" : ${isNaN(propElementValue) ? ("\"" + propElementValue + "\"") : propElementValue}`; return propString; } return null; } } items.forEach((item) => { var itemObjArray = []; var itemProps = []; for (const itemKey in item) itemObjArray.push(ExtractDataFromProp(item, itemKey)); item.props.forEach((prop) => { for (const propKey in prop) itemProps.push(ExtractDataFromProp(prop, propKey)); var finalObject = `{ ${itemObjArray.join(',').replace(/,\s*$/, "")}, "props": { ${itemProps.join(',').replace(/,\s*$/, "")} } }` // desiredOutput.push(JSON.parse(finalObject)) }); }); console.dir(desiredOutput);
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