Im trying to create a filter function where it can return a result of data that matches the value that i am looking for , from the given set of string keys
example of array:
let data = [
 { id:1 , data:{ name:"sample1",address:{ cat:"business" } } },
 { id:2 , data:{ name:"sample2",address:{ cat:"office"  }  } },
 { id:3 , data:{ name:"sample3",address:{ cat:"office"  } } },
 { id:4 , data:{ name:"sample4",address:{ cat:"office"  }  } }
 { id:5 , data:{ name:"sample5",address:{ cat:"home"  } } }
 { id:6 , data:{ name:"sample6",address:{ cat:"home"  }  } }
]
function filter( collection , value ,key ){
  //code 
}
let result = filter( data , "business" , [ "data","address","cat" ] )
console.log(result)
expected result is
{ id:1 , data:{ name:"sample1",address:{ cat:"business" } } },
You can use filter to search for the data. Use reduce to construct the keys.
Note: filter returns an array of matched elements. If you prefer the first match only, you can use find
const data = [
  { id: 1, data: { name: "sample1", address:{ cat: "business" } } },
  { id: 2, data: { name: "sample2", address:{ cat: "office" } } },
  { id: 3, data: { name: "sample3", address:{ cat: "office" } } },
  { id: 4, data: { name: "sample4", address:{ cat: "office" } } },
  { id: 5, data: { name: "sample5", address:{ cat: "home" } } },
  { id: 6, data: { name: "sample6", address:{ cat: "home" } } }
]
const filter = (collection, keys, value) => 
  collection.filter(o => keys.reduce((c, v) => c[v] || {}, o) === value)
const result = filter(data, ["data", "address", "cat"], "business")
console.log(result)If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With