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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

安全地訪問Javascript嵌套對(duì)象

安全地訪問Javascript嵌套對(duì)象

瀟瀟雨雨 2019-10-22 21:37:16
我有基于json的數(shù)據(jù)結(jié)構(gòu),其中包含嵌套對(duì)象。為了訪問特定的數(shù)據(jù)元素,我將對(duì)對(duì)象屬性的引用鏈接在一起。例如:var a = b.c.d;如果未定義b或bc,則將失敗并顯示錯(cuò)誤。但是,我想獲得一個(gè)值,如果它存在,否則就是不確定的。無需檢查鏈中每個(gè)值是否存在的最佳方法是什么?我想使這種方法盡可能通用,所以我不必添加大量的輔助方法,例如:var a = b.getD();要么var a = helpers.getDFromB(b);我也想嘗試避免使用try / catch構(gòu)造,因?yàn)檫@不是錯(cuò)誤,因此使用try / catch似乎放錯(cuò)了位置。那合理嗎?有任何想法嗎?
查看完整描述

3 回答

?
FFIVE

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊

您可以創(chuàng)建一個(gè)通用方法,該方法基于屬性名稱數(shù)組訪問元素,該屬性名稱數(shù)組被解釋為通過屬性的路徑:


function getValue(data, path) {

    var i, len = path.length;

    for (i = 0; typeof data === 'object' && i < len; ++i) {

        data = data[path[i]];

    }

    return data;

}

然后,您可以使用以下命令調(diào)用它:


var a = getValue(b, ["c", "d"]);


查看完整回答
反對(duì) 回復(fù) 2019-10-22
?
三國(guó)紛爭(zhēng)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊

標(biāo)準(zhǔn)方法:


var a = b && b.c && b.c.d && b.c.d.e;

速度非常快,但不太優(yōu)雅(尤其是具有較長(zhǎng)的屬性名稱)。


使用函數(shù)遍歷JavaScipt對(duì)象屬性既不高效也不優(yōu)雅。


嘗試以下方法:


try { var a = b.c.d.e; } catch(e){}

如果您確定a以前沒有使用過,或者


try { var a = b.c.d.e; } catch(e){ a = undefined; }

如果您之前已經(jīng)分配過。


這可能比第一種選擇更快。


查看完整回答
反對(duì) 回復(fù) 2019-10-22
?
DIEA

TA貢獻(xiàn)1820條經(jīng)驗(yàn) 獲得超3個(gè)贊

獲取的價(jià)值path的object。如果解析的值為undefined,defaultValue則返回。


在ES6中,我們可以從Object下面的類似代碼片段中獲取嵌套屬性。


const myObject = {

    a: {

      b: {

        c: {

          d: 'test'

        }

      }

    },

    c: {

      d: 'Test 2'

    }

  },


  isObject = obj => obj && typeof obj === 'object',


  hasKey = (obj, key) => key in obj;




function nestedObj(obj, property, callback) {

  return property.split('.').reduce((item, key) => {

    if (isObject(item) && hasKey(item, key)) {

      return item[key];

    }

    return typeof callback != undefined ? callback : undefined;

  }, obj);

}


console.log(nestedObj(myObject, 'a.b.c.d')); //return test



console.log(nestedObj(myObject, 'a.b.c.d.e')); //return undefined



console.log(nestedObj(myObject, 'c.d')); //return Test 2



console.log(nestedObj(myObject, 'd.d', false)); //return false



console.log(nestedObj(myObject, 'a.b')); //return {"c": {"d": "test"}}


查看完整回答
反對(duì) 回復(fù) 2019-10-22
  • 3 回答
  • 0 關(guān)注
  • 816 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

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