JavaScript:当路径未知时,检查嵌套对象中是否存在密钥

我正在尝试检查我的对象中是否存在密钥。

我不知道密钥可以在哪个或哪个嵌套对象上具体,我只知道密钥(或属性)的名称。拥有一个允许快速搜索对象并确定对象中是否存在属性键的函数对我来说非常方便。

为了说明这一点,我的模拟对象将是这样的:

const testObject = {
  one : {
    two : {
      three : "hello"
    }
  }}

我希望找到一个密钥存在的函数将返回或true的属性密钥,并返回密钥"three""one"false"fooBar"

我尝试过该hasOwnProperty方法,但失败了。


DIEA
浏览 432回答 3
3回答

Helenr

一种方法是使用递归搜索函数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) {    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') ) // True这里的想法是:通过输入对象“obj”的键查找与输入“key”匹配的键“k”如果找到匹配则返回true,否则返回true查找能够存储嵌套对象的“obj”的任何值“val”(探索“对象”类型,因为只有这些可以存储嵌套键)和以递归方式搜索这些类型的“val”以获得匹配,如果找到,则返回true

子衿沉夜

Dacre Denny的答案也可以写成:  const hasKey = (obj, key) =>      Object.keys(obj).includes(key) ||     Object.values(obj)       .filter(it => typeof it === "object")       .some(it => hasKey(it, key));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript