慕码人8056858
一种方法是使用doesObjectHaveNestedKey()如下所示的递归搜索函数(这不需要像 lodash 这样的额外依赖项):const object = { some : { nested : { property : { to : [ { find : { foo : [ 1 , 2 , 3 ] } } ] } } }}/* Define function to recursively search for existence of key in obj */function doesObjectHaveNestedKey(obj, key) { if(obj === null || obj === undefined) { return false; } for(const k of Object.keys(obj)) { if(k === key) { /* Search keys of obj for match and return true if match found */ return true } else { const val = obj[k]; /* If k not a match, try to search it's value. We can search through object value types, seeing they are capable of containing objects with keys that might be a match */ if(typeof val === 'object') { /* Recursivly search for nested key match in nested val */ if(doesObjectHaveNestedKey(val, key) === true) { return true; } } } } return false;}console.log('has foo?', doesObjectHaveNestedKey(object, 'foo') ) // Trueconsole.log('has bar?', doesObjectHaveNestedKey(object, 'bar') ) // Falseconsole.log('has nested?', doesObjectHaveNestedKey(object, 'nested') ) // Trueconsole.log('has cat?', doesObjectHaveNestedKey(null, 'cat') ) // False这里的想法是:查看输入对象“obj”的键,寻找与输入“key”匹配的键“k”如果找到匹配项,则返回 true,否则寻找能够存储嵌套对象的“obj”的任何值“val”(探索“Object”类型,因为只有这些可以存储嵌套键)和递归搜索这些类型的“val”以进行匹配,如果找到,则返回 true