求JavaScript对象的深度
巴扎黑
巴扎黑 2017-04-11 11:58:22
[JavaScript讨论组]
var a = {
    aa: {
        aaa: 1,
        bbb: {
            aaaa: 9
        },
        ccc: {
            aaaa: {
                aaaaa: 9090,
                bbbbb: 90909
            }
        }
    }
}

假如有以上对象a,求a的深度。换做一个更加普通的,未知的对象,该如何解决?

巴扎黑
巴扎黑

全部回复(6)
PHP中文网
var a = {
  aa: {
    aaa: 1,
    bbb: {
      aaaa: 9,
      dsfs: null,
      da: ['e9875t987']
    },
    ccc: {
      aaaa: {
        aaaaa: 9090,
        bbbbb: 90909
      }
    }
  }
}

function longTree (obj) {
  let walk = []
  ;(function walkTree (obj, deeppath) {
    if (Object.prototype.toString.call(obj) !== '[object Object]') {
      return walk.push(deeppath)
    }
    for (var i in obj) {
      walkTree(obj[i], deeppath + '.' + i)
    }
  })(obj, '')
  return Math.max.apply(null, walk.map(function (n) {
    return n.split('.').length
  }))
}

console.log(longTree(a))
// output
5

没有考虑数组里的object的深度

怪我咯

求a的深度?是不是想访问对象里面的值呢?如果是使用.符号,比如访问bbbbb的值:console.log(a.aa.ccc.aaaa.bbbbb);

黄舟

没想到好方法, 简单一点就是不断遍历对象的属性,如果属性值是对象的话在遍历这个对象,知道所有的都不是对象

阿神
var count = 0;
function deep(obj){
    for(key in obj){
        if(obj[key].constructor == Object){
            count++;
            deep(obj[key]);
        }
    }
}

deep(a);

console.log(count);
怪我咯
function(object) {
    var level = 1;
    var key;
    for (key in object) {
        if (!object.hasOwnProperty(key)) continue;

        if (typeof object[key] == 'object') {
            var depth = utils.depthOf(object[key]) + 1;
            level = Math.max(depth, level);
        }
    }
    return level;
}

前提是你的object里面没有循环应用,否则这程序就死循环了。如果要防止这个,你就要记录下每个引用来比较了

迷茫

//尽量用较少的代码来写,用了递归;
var depth = 1;
function getDepth(){return function(a){for(var i in a){var temp = typeof(a[i]);if (temp == 'object') {arguments.callee(a[i]);depth++;}}}}
getDepth()(a);
console.log(depth);

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号