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

156
Vistas
Cómo insertar un objeto dinámico en una matriz desde un bucle

Tengo una matriz de objetos con una sub-matriz. Quiero empujar el valor de la suma de la sub-matriz en la matriz de objetos principal.

La suma de la submatriz está determinada por la matriz de búsqueda.

Aquí está la matriz principal con la sub-matriz:

 const objectArray = [ { 'name': 'Alpha', 'data': [{ 'subData': 'a', 'value': 1 }, { 'subData': 'a', 'value': 2 }, { 'subData': 'b', 'value': 3 }, { 'subData': 'b', 'value': 4 }, { 'subData': 'c', 'value': 5 }] }, { 'name': 'Beta', 'data': [{ 'subData': 'a', 'value': 8 }, { 'subData': 'a', 'value': 9 }, { 'subData': 'b', 'value': 10 }, { 'subData': 'b', 'value': 11 }] } ]

Aquí está la matriz de búsqueda:

 const searchArray = [ { 'search': 'a' }, { 'search': 'b' },{ 'search': 'c' }]

Esto es lo que he comenzado:

 for (let i = 0; i < objectArray.length; i++) { for (let j = 0; j < searchArray.length; j++) { const filterObject = objectArray[i].data.filter(a => a.subData == searchArray[j].search); const sumValue = filterObject && filterObject.length > 0 ? filterObject.reduce(function (a, b) { return a + +b.value; }, 0) : 0; const keyName = searchArray[j].search; var objPush = {}; objPush[keyName] = sumValue; // console.log(' obj:', obj ); } }

Aquí, el objeto "objPush" debe agregarse a objectArray para que la matriz deseada sea esta:

 const desiredArray = [ { 'name': 'Alpha', 'a': 3, 'b': 7, 'c':5, 'data': [{ 'subData': 'a', 'value': 1 }, { 'subData': 'a', 'value': 2 }, { 'subData': 'b', 'value': 3 }, { 'subData': 'b', 'value': 4 }, { 'subData': 'c', 'value': 5 }] }, { 'name': 'Beta', 'a': 17, 'b': 21, 'c':0, 'data': [{ 'subData': 'a', 'value': 8 }, { 'subData': 'a', 'value': 9 }, { 'subData': 'b', 'value': 10 }, { 'subData': 'b', 'value': 11 }] } ]

¿Cómo logro mi Array deseado?

about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Puede lograr fácilmente el resultado usando map , forEach y reduce

 const objectArray = [ { name: "Alpha", data: [ { subData: "a", value: 1 }, { subData: "a", value: 2 }, { subData: "b", value: 3 }, { subData: "b", value: 4 }, { subData: "c", value: 5 }, ], }, { name: "Beta", data: [ { subData: "a", value: 8 }, { subData: "a", value: 9 }, { subData: "b", value: 10 }, { subData: "b", value: 11 }, ], }, ]; const searchArray = [{ search: "a" }, { search: "b" }, { search: "c" }]; const result = objectArray.map((obj) => { const temp = { ...obj }; searchArray.forEach(({ search }) => { temp[search] = obj.data.reduce((acc, curr) => (curr.subData === search ? acc + curr.value : acc),0); }); return temp; }); console.log(result);
 /* This is not a part of answer. It is just to give the output fill height. So IGNORE IT */ .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

 const objectArray = [ { name: 'Alpha', data: [ { subData: 'a', value: 1 }, { subData: 'a', value: 2 }, { subData: 'b', value: 3 }, { subData: 'b', value: 4 }, { subData: 'c', value: 5 }, ], }, { name: 'Beta', data: [ { subData: 'a', value: 8 }, { subData: 'a', value: 9 }, { subData: 'b', value: 10 }, { subData: 'b', value: 11 }, ], }, ]; function reduceData(array) { return array.reduce((acc, el) => { if (acc[el.subData]) { acc[el.subData] += el.value; } else { acc[el.subData] = el.value || 0; } return acc; }, {}); } function handleArray(array) { return array.map((el) => ({ ...el, ...reduceData(el.data) })) } console.log(handleArray(objectArray));

about 4 years ago · Juan Pablo Isaza Denunciar

0

No está claro cómo espera usar su searchArray en un sentido más general, ya que les está dando a todos la misma clave de search y no la está usando para especificar propiedades más específicamente.

Si solo desea agregar todos los subData en todos los objetos, primero puede extraer todos los valores de subData únicos.

 const sub_datum = [...new Set(objectArray.flatMap((o) => o.data.map((d) => d.subData)))];

Y luego map() sobre la matriz y agregar la matriz de data de cada objeto.

 const objectArray = [ { name: 'Alpha', data: [ { subData: 'a', value: 1 }, { subData: 'a', value: 2 }, { subData: 'b', value: 3 }, { subData: 'b', value: 4 }, { subData: 'c', value: 5 }, ], }, { name: 'Beta', data: [ { subData: 'a', value: 8 }, { subData: 'a', value: 9 }, { subData: 'b', value: 10 }, { subData: 'b', value: 11 }, ], }, ]; const aggregate_subdata = (arr, data_points) => arr.reduce( (a, o) => ((a[o.subData] = a[o.subData] + o.value), a), Object.fromEntries(data_points.map((k) => [k, 0])) ); const sub_datum = [...new Set(objectArray.flatMap((o) => o.data.map((d) => d.subData)))]; const result = objectArray.map((o) => ({ ...o, ...aggregate_subdata(o.data, sub_datum) })); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

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