I have two objects:
const people = [
{
name: "Dave",
fruit: ["apple", "pear"],
veg: ["asparagus", "peas"]
},
{
name: "Frank",
fruit: ["mango", "banana"],
veg: ["sweetcorn"]
},
{
name: "Alice",
fruit: ["mango", "peach"],
veg: ["asparagus"]
}];
const demographics = {
fruit: ["apple", "mango"],
veg: ["asparagus"]
}
I would like to find which ‘people’ like the fruit ‘apple’ or ‘mango’ and the veg ‘asparagus’, as defined in the ‘demographics’ object, like so:
[{
name: "Dave",
fruit: ["apple", "pear"],
veg: ["asparagus", "peas"]
},
{
name: "Alice",
fruit: ["mango", "peach"],
veg: ["asparagus"]
}]
I’ve been staring at this all day and am not advanced enough to dig into objects like this. Can anyone help? If possible, I would like to use underscore, but not essential.
3
Answers
first I converted the demographics object to an array so i can iterate easily. after that filter the person array with the conditions
check every demographic where in each demographic at least 1 satisfies (is inside the veg or fruit.. arrays of a person).
You can find equivalent methods
pairs
,filter
,some
,every
,contains
if you want to convert above using underscorepeople in here is an array of objects.
Hope this will help (y)
Modern JavaScript has a lot of really useful array and object methods that you can use to spare the additional code footprint of Underscore.
In essence (links to documentation below) you want to
filter
out all of the people who have at leastsome
of the elements in their fruit/veg arrays that appear inevery
corresponding query array.Additional documentation
filter
every
some
includes
Object.keys