The following function searches an object recursively through an object that has nested arrays:
function findDeep(arr, obj) {
console.log(arr)
if (arr.indexOf(obj) !== -1) {
console.log(arr)
return arr
} else {
arr.forEach(item => {
if (item.children) findDeep(item.children, obj)
})
}
}
const colors = {
children: [
{
name: 'white',
},
{
name: 'yellow',
children: [
{
name: 'black'
}
]
}
]
}
const color = {
name: 'black'
}
findDeep(colors.children, color)
The first console.log(arr)
do log the matched array:
[
{ name: 'black' }
]
But he second console.log(arr)
doesn't log anything. Shouldn't arr.indexOf(obj)
return 1, and therefore make the second console.log(arr)
log the array?
Here's the CodePen.