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

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

安全地訪問Javascript嵌套對象

安全地訪問Javascript嵌套對象

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

3 回答

?
FFIVE

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

您可以創(chuàng)建一個通用方法,該方法基于屬性名稱數(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"]);


查看完整回答
反對 回復 2019-10-22
?
三國紛爭

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

標準方法:


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

速度非??欤惶珒?yōu)雅(尤其是具有較長的屬性名稱)。


使用函數(shù)遍歷JavaScipt對象屬性既不高效也不優(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)分配過。


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


查看完整回答
反對 回復 2019-10-22
?
DIEA

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

獲取的價值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"}}


查看完整回答
反對 回復 2019-10-22
  • 3 回答
  • 0 關注
  • 802 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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