第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JavaScript:當其路徑未知時,檢查嵌套對象中是否存在鍵

JavaScript:當其路徑未知時,檢查嵌套對象中是否存在鍵

暮色呼如 2021-06-01 17:09:32
我正在嘗試檢查我的對象中是否存在密鑰。我不知道密鑰可能具體在哪里或在哪個嵌套對象上,我只知道密鑰(或?qū)傩裕┑拿Q。有一個功能可以快速搜索對象并確定對象中是否存在屬性鍵,這對我來說非常方便。為了說明這一點,我的模擬對象將是這樣的:const testObject = {  one : {    two : {      three : "hello"    }  }}我希望一個查找鍵是否存在的函數(shù)會返回true一個屬性鍵"three"or "one",并且會返回false一個鍵"fooBar"我已經(jīng)嘗試過該hasOwnProperty方法,但它失敗了。
查看完整描述

2 回答

?
慕碼人8056858

TA貢獻1803條經(jīng)驗 獲得超6個贊

一種方法是使用doesObjectHaveNestedKey()如下所示的遞歸搜索函數(shù)(這不需要像 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') )        // True

console.log('has bar?', doesObjectHaveNestedKey(object, 'bar') )        // False

console.log('has nested?', doesObjectHaveNestedKey(object, 'nested') )  // True

console.log('has cat?', doesObjectHaveNestedKey(null, 'cat') )          // False

這里的想法是:

  1. 查看輸入對象“obj”的鍵,尋找與輸入“key”匹配的鍵“k”

  2. 如果找到匹配項,則返回 true,否則

  3. 尋找能夠存儲嵌套對象的“obj”的任何值“val”(探索“Object”類型,因為只有這些可以存儲嵌套鍵)和

  4. 遞歸搜索這些類型的“val”以進行匹配,如果找到,則返回 true


查看完整回答
反對 回復 2021-06-03
?
回首憶惘然

TA貢獻1847條經(jīng)驗 獲得超11個贊

Dacre Denny 的答案也可以寫成:


  const hasKey = (obj, key) => 

    Object.keys(obj).includes(key) ||

    Object.values(obj)

      .filter(it => typeof it === "object" && it !== null)

      .some(it => hasKey(it, key));


查看完整回答
反對 回復 2021-06-03
  • 2 回答
  • 0 關(guān)注
  • 230 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號