I am trying to apply multiple array.filter at once in a single line, What it doesn't return anything.
let data = [
{
"name" : "Person1",
"details":[
{"status":"A"},
{"status":"A"},
{"status":"P"},
{"status":"A"},
{"status":"P"}
]
},{
"name" : "Person2",
"details":[
{"status":"A"},
{"status":"A"},
{"status":"P"},
{"status":"A"},
{"status":"P"}
]
},{
"name" : "Person3",
"details":[
{"status":"A"},
{"status":"A"},
{"status":"P"},
{"status":"A"},
{"status":"P"}
]
},{
"name" : "Person4",
"details":[
{"status":"A"},
{"status":"A"},
{"status":"P"},
{"status":"A"},
{"status":"P"}
]
}
]
I am trying to collect all the A and P data and push into a single array for further next work.
My array.filter code is here:
var findA = data.filter(Obj=>Obj.details(InnerObj=>InnerObj.status === 'A'))
Am I using it correct because I am not getting anything
Result I want :
[
{
"name" : "Person1",
"A" : [
{"status":"A"},
{"status":"A"},
{"status":"A"}
],
"P":[
{"status":"P"},
{"status":"P"}
]
},{
"name" : "Person2",
"A" : [
{"status":"A"},
{"status":"A"},
{"status":"A"}
],
"P":[
{"status":"P"},
{"status":"P"}
]
}
]
You could map the outer objects and group details.
const
data = [{ name: "Person1", details: [{ status: "A" }, { status: "A" }, { status: "P" }, { status: "A" }, { status: "P" }] }, { name: "Person2", details: [{ status: "A" }, { status: "A" }, { status: "P" }, { status: "A" }, { status: "P" }] }, { name: "Person3", details: [{ status: "A" }, { status: "A" }, { status: "P" }, { status: "A" }, { status: "P" }] }, { name: "Person4", details: [{ status: "A" }, { status: "A" }, { status: "P" }, { status: "A" }, { status: "P" }] }],
result = data.map(({ name, details }) => ({ name, ...details.reduce((r, o) => {
(r[o.status] ??= []).push(o);
return r;
}, {}) }));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }