鍍金池/ 問答/HTML/ JS通過屬性名獲取父屬性的屬性名

JS通過屬性名獲取父屬性的屬性名

有點描述不好,大概意思是比如我有這么一個對象:

    {
        a : {
            aa : {
               aaa : 123,
               bbb : 124
            } 
        },
        b : 1,
        c : [1,2,3]
        d : 2
    }
    我現(xiàn)在知道了一個屬性名“aaa”,我希望通過一個方法得到根屬性名“a”。
回答
編輯回答
空痕

你這種就是最好寫子類的時候帶一個屬性,就是父級對象 要查的時候 一個while循環(huán)就到最頂級了

2018年3月28日 21:27
編輯回答
乞許

其實這個問題,有種投機取巧的辦法:

var json = {
        a:{
            aa:{
               aaa:123,
               bbb:124
            } 
        },
        b:[{k:"f"}],
        c:[{a:[{abc:{def:8}}],b:1}],
        d:2
    }
    //這段直接復制上面兄弟的

有一個小東西:JSON.stringify
結果:

"{"a":{"aa":{"aaa":123,"bbb":124}},"b":[{"k":"f"}],"c":[{"a":[{"abc":{"def":8}}],"b":1}],"d":2}"

然后,按{一層層往上找就好了,找到,或者開頭為止

2018年9月5日 23:55
編輯回答
維她命

類似深度優(yōu)先搜索,遍歷對象的所有屬性,不斷遞歸,直到找到那個屬性就可以

2017年4月27日 11:41
編輯回答
愿如初

這個恐怕不行,找不到。

2017年5月25日 06:48
編輯回答
空痕

隨便寫的可以測一下(有點亂看看就行,屬性名一樣會返回第一個找到的)

var json = {
        a:{
            aa:{
               aaa:123,
               bbb:124
            } 
        },
        b:[{k:"f"}],
        c:[{a:[{abc:{def:8}}],b:1}],
        d:2
    };

function dg(json,a){
    var cb = null;
    if({}.toString.call(json)=="[object Object]"){
          for(var i in json){
              if(i==a){
              return i
          }
          if({}.toString.call(json[i])=="[object Object]"||{}.toString.call(json[i])=="[object Array]"){
              if(dg(json[i],a)){
                return i;
            }
          }
      }
  }else if({}.toString.call(json)=="[object Array]"){
    for(var i=0;i<json.length;i++){
      if({}.toString.call(json[i])=="[object Object]"){
       cb = dg(json[i],a)
      }
    }
  }
  return cb
}
console.log(dg(json,"abc"))
2017年3月5日 20:47
編輯回答
過客

首先你要解決什么問題?如果要訪問aaa的話,必須通過a對象進入訪問;如果是現(xiàn)在知道aaa這個屬性名在這個大對象中,但是不知道aaa的父對象是誰的話只能通過遍歷搜索了

2018年3月13日 06:02