keys
is non-empty and use Array.prototype.every()
to sequentially check its keys to internal depth of the object, obj
.Object.prototype.hasOwnProperty()
to check if obj
does not have the current key or is not an object, stop propagation and return false
.obj
to use on the next iteration.false
beforehand if given key list is empty.const hasKey = (obj, keys) => { return ( keys.length > 0 && keys.every(key => { if (typeof obj !== 'object' || !obj.hasOwnProperty(key)) return false; obj = obj[key]; return true; }) ); };
let obj = {
a: 1,
b: { c: 4 },
'b.d': 5
};
hasKey(obj, ['a']); // true
hasKey(obj, ['b']); // true
hasKey(obj, ['b', 'c']); // true
hasKey(obj, ['b.d']); // true
hasKey(obj, ['d']); // false
hasKey(obj, ['c']); // false
hasKey(obj, ['b', 'f']); // false
Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️