JS通过属性名获取父属性的属性名

有点描述不好,大概意思是比如我有这么一个对象:

    {
        a : {
            aa : {
               aaa : 123,
               bbb : 124
            } 
        },
        b : 1,
        c : [1,2,3]
        d : 2
    }
    我现在知道了一个属性名“aaa”,我希望通过一个方法得到根属性名“a”。
阅读 7.2k
6 个回答

类似深度优先搜索,遍历对象的所有属性,不断递归,直到找到那个属性就可以

首先你要解决什么问题?如果要访问aaa的话,必须通过a对象进入访问;如果是现在知道aaa这个属性名在这个大对象中,但是不知道aaa的父对象是谁的话只能通过遍历搜索了

你这种就是最好写子类的时候带一个属性,就是父级对象 要查的时候 一个while循环就到最顶级了

这个恐怕不行,找不到。

随便写的可以测一下(有点乱看看就行,属性名一样会返回第一个找到的)

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"))

其实这个问题,有种投机取巧的办法:

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}"

然后,按{一层层往上找就好了,找到,或者开头为止

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题