Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

205
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda