// There could potentially be more than 3 keys in the object below.
const items = [{
color: 'red',
type: 'tv',
age: 18
},
{
color: 'silver',
type: 'phone',
age: 20
},
{
color: 'yellow',
type: 'truck',
age: 10
},
{
color: 'blue',
type: 'shirt',
age: 5
},
];
const excludes = [{
k: 'color',
v: 'silver'
},
{
k: 'type',
v: 'tv'
},
{
k: 'color',
v: 'red'
}
];
// SOLUTION
const excludesMap = excludes.reduce((acc, curr) => {
(acc[curr.k] || (acc[curr.k] = {}))[curr.v] = true;
return acc;
}, {});
/*
color: red: true,
green: true ...
type: tv: true
truck: true, ...
*/
const exclude = (items, excludes) => items.filter(item => {
for (const [key, value] of Object.entries(item)) {
if(excludesMap[key]?.[value])
return false;
}
return true;
});
console.log(exclude(items, excludes));
/*
[{
age: 10,
color: "yellow",
type: "truck"
}, {
age: 5,
color: "blue",
type: "shirt"
}]
*/
Categories