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

179
Visualizações
cómo filtrar una matriz de objetos con el mismo nombre y estado en JS

Hola a todos, tengo el siguiente código.

 [ {service: { name: "Home" },status: "Generated", feeCharged:{id:1,fee:2}, {service: { name: " Photography" },status: "requested",feeCharged:{id:2,fee:24}}, {service: { name: "Electrical" },status: "requested",feeCharged:{id:6,fee:42}}, {service: { name: "Electrical" },status: "Completed",feeCharged:{id:66,fee:23} }, {service: { name: " Photography" },status: "Completed",feeCharged:{id:78,fee:11}}, {service: { name: "Home" },status: "Generated",feeCharged:{id:45,fee:234}}, {service: { name: "Electrical" }, status: "requested",feeCharged:{id:77,fee:3} }, {service: { name: "Electrical" }, status: "requested",feeCharged:{id:4,fee:33} } ]

Ahora estoy tratando de filtrarlos en una nueva matriz por service.name y por status y agregar count .

El resultado final debe ser:

 [ { name: "Home", status: "Generated", count: 2 }, { name: "Photography", status: "requested", count: 1 }, { name: "Photography", status: "Completed", count: 1 }, { name: "Electrical", status: "requested", count: 3 }, { name: "Electrical", status: "Completed", count: 1 } ]

Entonces, como puede ver en mi resultado final, si hay el mismo service.name . Nombre y status , los estoy fusionando en un objeto y configurando el conteo.

Para filtrar, intento esto, pero no funciona como esperaba:

 let answer = []; data.forEach((x) => { if (!answer.some((y) => y.name === x.service.name)) { let newAnswer = {}; newAnswer.name = x.service.name; newAnswer.value = 1; answer.push(newAnswer); } else { let existAnswer = answer.find((y) => y.name === x.service.name); existAnswer.value++; } });

Por favor, ayúdame a lograr ese resultado, gracias.

about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

¿Quizás esto te sea útil?

 const data = [{ service: { name: "Home" }, status: "Generated", feeCharged: { id: 1, fee: 2 }},{ service: { name: " Photography" }, status: "requested", feeCharged: { id: 2, fee: 24 } }, { service: { name: "Electrical" }, status: "requested", feeCharged: { id: 6, fee: 42 } }, { service: { name: "Electrical" }, status: "Completed", feeCharged: { id: 66, fee: 23 } }, { service: { name: " Photography" }, status: "Completed", feeCharged: { id: 78, fee: 11 } }, { service: { name: "Home" }, status: "Generated", feeCharged: { id: 45, fee: 234 } }, { service: { name: "Electrical" }, status: "requested", feeCharged: { id: 77, fee: 3 } }, { service: { name: "Electrical" }, status: "requested", feeCharged: { id: 4, fee: 33 } }]; const res = Object.entries(data.reduce((a, e, nam) => { // get counts of name/status combinations nam = e.service.name + "|" + e.status; a[nam] = (a[nam] ?? 0) + 1; return a; }, {})).map(([k, n], t) =>{ // separate name/status key values again ... t = k.split("|"); return {name: t[0],status: t[1],count: n}; }) console.log(res)

(La implementación actual usa | como delimitador entre el nombre y el valor de estado. Por lo tanto, fallará si un nombre o valor de estado contiene este carácter).

about 4 years ago · Santiago Trujillo 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