Hi all I have following code
[
{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} }
]
Now I am trying to filter them in new array by service.name and by status and add count.
The final result should be:
[
{ 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 }
]
So as you see in my final result if there are same service.name and status I am merging them into one object and setting count.
For filtering I try this, but it not working as I expected:
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++;
}
});
Please help me to achieve that result, thanks.