I am trying to show total count of participants based on two conditions: have "Nume": "4S110" and "Nume": "Contabilitate" from INDICATORI array and Cursuri array.
to show them as
const cont = popular.reduce((total, participant) => total participant.Cursuri
.filter(curs => curs.Nume === "Contabilitate") && participant.INDICATORI
.filter(indicator => indicator.Nume === "4S110").length,0)
output is : 0, it should be 1
api is:
```
"rows": [
{
"id": "15f806ec-79cf-498f-8a4d-8bc8fdf8c43e",
"Nume": "negrea",
"Prenume": "ioana",
"Varsta": 40,
"createdAt": "2022-04-27T13:17:05.000Z",
"updatedAt": "2022-04-27T13:17:05.000Z",
"deletedAt": null,
"INDICATORI": [
{
"id": "068170b3-7995-41df-8fac-4f2bc577e2c6",
"Nume": "4S110",
"importHash": null,
}
],
"Cursuri": [{
"id": "068170b3-7995-41df-8fac-4f2bc577e2c6",
"Nume": "Contabilitate",
"importHash": null,
]
},
CodePudding user response:
The .filter() function returns an array so you need to add .length. Math.min() can help in case you want to count such person only once (must have an entry in both items).
let popular = JSON.parse(`[
{
"id": "15f806ec-79cf-498f-8a4d-8bc8fdf8c43e",
"Nume": "negrea",
"Prenume": "ioana",
"Varsta": 40,
"createdAt": "2022-04-27T13:17:05.000Z",
"updatedAt": "2022-04-27T13:17:05.000Z",
"deletedAt": null,
"INDICATORI": [
{
"id": "068170b3-7995-41df-8fac-4f2bc577e2c6",
"Nume": "4S110",
"importHash": null
}
],
"Cursuri": [{
"id": "068170b3-7995-41df-8fac-4f2bc577e2c6",
"Nume": "Contabilitate",
"importHash": null
}]
}]`);
const count = popular.reduce((total, participant) => total Math.min(participant.Cursuri
.filter(indicator => indicator.Nume === "Contabilitate").length, participant.INDICATORI
.filter(indicator => indicator.Nume === "4S110").length), 0)
console.log(count);
