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.
 
     
     
    