2

我需要递归搜索一个复杂的 json 对象,并删除与任何以“_”开头的键关联的对象。

到目前为止,我有:

sanitize: function(json){
    for(var i in json){
        if(json[i]){
            if(i.substring(0,1) == "_")
                delete json[i];
            else
                this.sanitize(json[i]);
        }
    }
    console.log(json);
    return json;
}

我超过了最大调用堆栈。

4

1 回答 1

1

尝试使用您自己的数组,并确保子对象不是循环引用,并确保它们是对象。

function sanitize(json) {
    var stack = [];
    var done = [];

    do {
        for(var x in json) {
            if(x.charAt(0) === '_') {
                delete json[x];
            } else if(done.indexOf(json[x]) === -1 && typeof json[x] === 'object') {
                stack.push(json[x]);
                done.push(json[x]);
            }
        }
    } while(json = stack.pop());
}
于 2012-04-16T19:16:20.743 回答