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

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

遞歸遍歷對(duì)象以建立屬性列表

遞歸遍歷對(duì)象以建立屬性列表

胡說(shuō)叔叔 2019-12-12 14:10:20
情況:我有一個(gè)包含多個(gè)子對(duì)象和子子對(duì)象的大對(duì)象,其屬性包含多個(gè)數(shù)據(jù)類型。為了我們的目的,該對(duì)象看起來(lái)像這樣:var object = {    aProperty: {        aSetting1: 1,        aSetting2: 2,        aSetting3: 3,        aSetting4: 4,        aSetting5: 5    },    bProperty: {        bSetting1: {            bPropertySubSetting : true        },        bSetting2: "bString"    },    cProperty: {        cSetting: "cString"    }}我需要遍歷此對(duì)象并構(gòu)建一個(gè)顯示層次結(jié)構(gòu)的鍵的列表,因此該列表最終看起來(lái)像這樣:aProperty.aSetting1aProperty.aSetting2aProperty.aSetting3aProperty.aSetting4aProperty.aSetting5bProperty.bSetting1.bPropertySubSettingbProperty.bSetting2cProperty.cSetting我有這個(gè)函數(shù),它確實(shí)遍歷對(duì)象并吐出鍵,但不是分層地:function iterate(obj) {    for (var property in obj) {        if (obj.hasOwnProperty(property)) {            if (typeof obj[property] == "object") {                iterate(obj[property]);            }            else {                console.log(property + "   " + obj[property]);            }        }    }}有人可以讓我知道該怎么做嗎?這是一個(gè)讓您迷惑的jsfiddle:http : //jsfiddle.net/tbynA/
查看完整描述

3 回答

?
撒科打諢

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

我為你做了一個(gè)情人。我存儲(chǔ)一個(gè)stack字符串,然后輸出,如果該屬性是原始類型的:


function iterate(obj, stack) {

        for (var property in obj) {

            if (obj.hasOwnProperty(property)) {

                if (typeof obj[property] == "object") {

                    iterate(obj[property], stack + '.' + property);

                } else {

                    console.log(property + "   " + obj[property]);

                    $('#output').append($("<div/>").text(stack + '.' + property))

                }

            }

        }

    }


iterate(object, '')

不要使用,它已被竊聽(tīng)?

我最近在這個(gè)問(wèn)題上獲得了很多好評(píng),因此我決定使用一些ES2015 +魔術(shù)和更多功能的樣式來(lái)完善該解決方案。


它可能不太可讀,但是我喜歡它的外觀:)您仍然可以從上面使用一個(gè)更簡(jiǎn)單的解決方案-兩者應(yīng)該完全一樣。


const isObject = val =>

  typeof val === 'object' && !Array.isArray(val);


const paths = (obj = {}) =>

  Object.entries(obj)

    .reduce(

      (product, [key, value]) =>

        isObject(value) ?

        product.concat([

          [key, paths(value)] // adds [root, [children]] list

        ]) :

        product.concat([key]), // adds [child] list

      []

    )


const addDelimiter = (a, b) =>

  a ? `${a}.$` : b;


const pathToString = ([root, children]) =>

  children.map(

    child =>

      Array.isArray(child) ?

      addDelimiter(root, pathToString(child)) :

      addDelimiter(root, child)

  )

  .join('\n');


const input = {

  aProperty: {

    aSetting1: 1,

    aSetting2: 2,

    aSetting3: 3,

    aSetting4: 4,

    aSetting5: 5

  },

  bProperty: {

    bSetting1: {

      bPropertySubSetting: true

    },

    bSetting2: "bString"

  },

  cProperty: {

    cSetting: "cString"

  }

};


// ^ implies a "root" level will be ["", paths(input)]

// ideally paths() should return that structure, but I could not figure out how :)

// shows desired output format

console.log(pathToString(["", paths(input)]));


// showcase the resulting data structure

// any object can be recursively represented as a list [objectPropertyName, [...nestedPropertyNames]]

// console.log(paths(input));



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

添加回答

舉報(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)