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

203
Vistas
¿Cómo puedo recorrer un objeto de objetos y una matriz de objetos y actualizar los valores de objetos anidados en función del recuento de elementos de matriz coincidentes?

Digamos que tengo algunos datos organizados así...

 dataArr = [ {service: s1, status: ready}, {service: s2, status: ready}, {service: s1, status: retired}, {service: s3, status: retired}, {service: s2, status: ready} ]

Hay 3 servicios distintos. Cada elemento de datos tiene uno de los tres tipos de servicio y tiene un estado de retirado o listo.

¿Cómo puedo recorrer cada elemento en dataArr para crear el siguiente statusByServiceObj? Por ejemplo, dentro de todos los datos, quiero encontrar todos los tipos de servicio s1 y luego determinar cuántos s1 están en estado retirado o listo.

 statusByServiceObj = { {s1: {ready: 1, retired: 1} }, {s2: {ready: 2, retired: 0} }, {s3: {ready: 0, retired: 1} }, }

Donde estoy actualmente, he recorrido la matriz dataArr para crear un objeto como este:

 let obj = {}; let nestedObj = {}; dataArr.forEach(ele => { obj[ele.service] = nestedObj; nestedObj[ele.status] = 0; }); // obj now equals... obj = { {s1: {ready: 0, retired: 0} }, {s2: {ready: 0, retired: 0} }, {s3: {ready: 0, retired: 0} }, }

Tengo dificultades para completar los recuentos listos y retirados según el tipo de servicio, al recorrer mi dataArr.

Muy abierto a recomendaciones de mejores prácticas, nuevo en JS. Siento que me estoy volviendo loco al aplicar el valor 0 ... debería ser una especie de conteo. O posiblemente convertir el Objeto de Objetos en una Matriz de Objetos...

Intenté contar los valores de estado por servicios de esta manera:

 dataArr.forEach(ele => { for (let service in obj) { let countsObj = obj[service]; for (let status in countsObj) { if (ele.service === service && ele.status === status) { countsObj[status = countsObj[status] + 1; } } } }

Sin embargo, esto regresa a obj que obtiene los recuentos totales de cada estado en todo el dataArr, listo o retirado, y lo aplica a cada objeto de servicio:

 obj = { {s1: {ready: 3, retired: 2} }, {s2: {ready: 3, retired: 2} }, {s3: {ready: 3, retired: 2} }, }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede usar reducir para lograr el resultado deseado

 const dataArr = [ { service: "s1", status: "ready" }, { service: "s2", status: "ready" }, { service: "s1", status: "retired" }, { service: "s3", status: "retired" }, { service: "s2", status: "ready" }, ]; const result = dataArr.reduce((acc, curr) => { const { service, status } = curr; if (!acc[service]) acc[service] = { ready: 0, retired: 0 }; acc[service][status] += 1; return acc; }, {}); 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
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