In ES6 using find
or filter
I'm quite comfortable iterating through to find an element in an array using a value.
However, I'm trying to get a value from a parent array based upon a value from a nested array.
For example, in this data structure:
products: [
{
id: 01,
items: [
{
id: 01,
name: 'apple'
},
{
id: 02,
name: 'banana'
},
{
id: 03,
name: 'orange'
}
]
},
{
id: 02,
items: [
{
id: 01,
name: 'carrot'
},
{
id: 02,
name: 'lettuce'
},
{
id: 03,
name: 'peas'
}
]
},
{
id: 03,
items: [
{
id: 01,
name: 'eggs'
},
{
id: 02,
name: 'bread'
},
{
id: 03,
name: 'milk'
}
]
}
]
If I know the name
or id
of the object milk
, is there a way to find out the id of the element it's nested within?
Currently I have this:
products.find((product) => {
product.find((prod) => {
return prod.name === 'milk';
});
});
Which only returns the object containing milk
.
You have to return something from the callback of the outer
find
. In fact, for the inner iteration you shouldn't usefind
but rathersome
that returns a boolean for whether an element matching the condition exists within the arrray:or in short:
Then check whether
find
found something (notnull
!) and get its.id
, the result should be03
. Alternatively, you canfilter
for the products containing milk as an item and then map all the results to their id: