Javascript 挖掘到最深的价值或内容

Javascript 挖掘到最深的价值或内容,javascript,Javascript,我正在尝试编写一个函数,该函数将挖掘对象,直到它到达最后一个.value或.content属性。这是我写的,为了我的生命,我不明白它为什么会破裂 var jscGetDeepest = function(obj) { try { console.info(Math.round(Math.random() * 10) + ' starting jscGetDeepest:', obj, obj.toString()); } catch

我正在尝试编写一个函数,该函数将挖掘对象,直到它到达最后一个
.value
.content
属性。这是我写的,为了我的生命,我不明白它为什么会破裂

    var jscGetDeepest = function(obj) {
        try {
            console.info(Math.round(Math.random() * 10) + ' starting jscGetDeepest:', obj, obj.toString());
        } catch(ignore) {}

        while (obj && ('contents' in obj || 'value' in obj)) {
            if ('contents' in obj) {
                obj = obj.contents;
            } else if ('value' in obj) {
                obj = obj.value;
            }
            //console.info('loop jscGetDeepest:', obj.toString());
        }

        if (obj || obj === 0) {
            obj = obj.toString();
        }
        console.info('finaled jscGetDeepest:', obj);
        return obj;
    }

当下一次迭代中的内部值不是对象时,就会出现问题。在这种情况下,您会收到一条错误消息,因为操作数中的
不能与原语一起使用

要修复它,请在尝试深入之前检查对象。下面是一个修正版本,它稍微改进了一点,使用了
JSON.stringify
,而不是
toString
(可能最好不使用stringify返回对象本身?)

var jscgetdeep=函数(obj){
while(对象的类型=='object'&&obj!==null&&('contents'在obj中| |'value'在obj中)){
if(obj中的“内容”){
obj=obj.内容;
}else if(obj中的“值”){
obj=obj.值;
}
}
如果(对象的类型=='object'){
obj=JSON.stringify(obj);
}
返回obj;
}
警报(JSCGETDesthest({value:{name:2,contents:{name:3,value:23}}));

警报(JSCGETDestest({value:{name:2,value:{name:3,contents:{name:4}}}))它是如何断开的?什么不起作用?您的示例数据看起来像什么?您的
obj=obj.toString()
很可能是罪魁祸首。你为什么要这样做?谢谢我得到的所有问题是:
TypeError:invalid'in'操作数b
。使用
obj.toString()
它没有引起问题,因为它只会在
未定义
null
时出现问题,我会检查
if(obj)
示例数据可以是一个数字或具有最深值的任何对象、一个数字或一些文本。或者是一个没有.content或.values的对象,非常感谢!!回复:
JSON.stringify
方法也一样谢谢!那里的
.toString()
会有问题吗?因为我主要使用这个函数来比较两个对象
.value
/
.content
。所以我做了一些类似于
的事情,如果(jscgetdeep(obj1)==jscgetdeep(obj2))
,使用
.toString()
可以吗?我最诚挚的感谢!