The following code is producing the desired output but I'm wondering if there's a way to accomplish the same result by applying .filter() to data. Any other more concise approaches than shown below are also welcomed.
Data description: scenarios consist of a scenario object plus an array of profile objects
Filtering goal: keep scenarios that have flag = 1 and probability > 0.9
const data = [
{
"scenario": {
"scenarioId": 41511,
"flag": 1,
"probability": 0.92
},
"profile": [
{
"profileId": 1,
"scenarioId": 41511,
"capacity": 0.77
},
{
"profileId": 2,
"scenarioId": 41511,
"capacity": 0.74
}
]
},
{
"scenario": {
"scenarioId": 41521,
"flag": 1,
"probability": 0.8
},
"profile": [
{
"profileId": 3,
"scenarioId": 41521,
"capacity": 0.96
}
]
},
{
"scenario": {
"scenarioId": 41530,
"flag": 0,
"probability": 0.95
},
"profile": [
{
"profileId": 4,
"scenarioId": 41530,
"capacity": 0.73
},
{
"profileId": 5,
"scenarioId": 41530,
"capacity": 0.92
}
]
},
{
"scenario": {
"scenarioId": 41540,
"flag": 0,
"probability": 0.85
},
"profile": [
{
"profileId": 6,
"scenarioId": 41540,
"capacity": 0.88
}
]
},
{
"scenario": {
"scenarioId": 41551,
"flag": 1,
"probability": 1
},
"profile": [
{
"profileId": 7,
"scenarioId": 41551,
"capacity": 0.88
},
{
"profileId": 8,
"scenarioId": 41551,
"capacity": 0.99
}
]
},
];
const keepers = {};
for (i of data) {
if (i.scenario.flag == 1 && i.scenario.probability > 0.9) {
keepers[i.scenario.scenarioId] = { ...i.scenario, profile: i.profile };
}
}
console.log(keepers);