Reputation: 356
I have an array of item "mockData" & a Filter array "filter" in angular 8:
filter=[
{column:"name",show:true},
{column:"Sex",show:false},
];
mockData=[
{name:"test",sex:"m"},
{name:"test2",sex:"m"},
{name:"test3",sex:"f"},
{name:"test4",sex:"f"},
];
I want to map only the columns of mockData which are set as true in filter array.
result should look something like this.
[
{name:"test"},
{name:"test2"},
{name:"test3"},
{name:"test4"},
]
it should check in filter mandatorily.
Upvotes: 1
Views: 60
Reputation: 389
const filter = [
{
column: "name",
show: true
},
{
column: "sex",
show: false
}
];
const mockData = [
{
name: "test",
sex: "m"
},
{
name: "test2",
sex: "m"
},
{
name: "test3",
sex: "f"
},
{
name: "test4",
sex: "f"
}
];
const filteredMockData = mockData.map(data =>
Object.entries(data).reduce(
(result, [key, value]) =>
filter.find(f => f.column === key && f.show)
? { ...result, [key]: value }
: result,
{}
)
);
console.log(filteredMockData);
Upvotes: 1