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.
¿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).