I'm wondering if there is any implimentation of a object.contains
method in javascript that works similar to how the Python version object.__contains__()
works, as in I want to be able to scan the whole object with nested objects to see if there is either a key or a value that does contain what the method is comparing it against. I know there are other ways in Javascript to do this such as using filter
and some
, but they don't work for me.
person: {
name: 'Bob',
age: 40,
items: {
cars: 4,
house: 1,
computer: 2
}
}
I need something that scans the WHOLE object rather than just the first level of it (which would be name
, age
, and items
, and if you searched for cars
you wouldn't get any response).
I don't think so. A naive take would be
JSON.stringify(target).includes( JSON.stringify( search ) )
It doesn't work well if search
is not a string though, as that will also match also inside strings. A non naive approach would be something like this:
const contains = (obj, search) =>
Object.keys(obj).includes(search) ||
Object.values(obj).includes(search) ||
Object.values(obj)
.filter(it => typeof it === "object" && it !== null)
.some(it => contains(it, search));