Javascript 删除圆形对象

Javascript 删除圆形对象,javascript,circular-reference,Javascript,Circular Reference,我有一个函数,我调用它来切掉某个点以外的任何东西,但是有没有其他方法可以找到对自身的引用并以某种方式巧妙地删除该引用 以下是我现在使用的: //Changing the max level will speed things up, but it will mean that some things might not be persisted function cleanse(Obj, level) { var r, i, prims = ["string", "number", "b

我有一个函数,我调用它来切掉某个点以外的任何东西,但是有没有其他方法可以找到对自身的引用并以某种方式巧妙地删除该引用

以下是我现在使用的:

//Changing the max level will speed things up, but it will mean that some things might not be persisted
function cleanse(Obj, level) {
    var r, i, prims = ["string", "number", "boolean"], maxLevel = 8;
    level = level || 0;
    if (prims.indexOf(typeof Obj) !== -1) {
        r = Obj;
    } else if (Obj instanceof Function) {
        console.log("Please dont reference objects");
        return undefined;
    } else {
        if (Obj instanceof Array) {
            r = [];
        } else {
            r = {};
        }
        for (i in Obj) {
            if (Obj.hasOwnProperty(i)) {
                if (level <= maxLevel) {
                    r[i] = BackStack.cleanse(Obj[i], level + 1);
                }
            }
        }
    }
    return r;
};
//更改最大级别将加快速度,但这意味着某些内容可能无法持久化
功能清理(Obj,级别){
变量r,i,prims=[“字符串”,“数字”,“布尔值”],maxLevel=8;
级别=级别| | 0;
if(基本索引of(对象类型)!=-1){
r=Obj;
}else if(Obj instanceof函数){
log(“请不要引用对象”);
返回未定义;
}否则{
if(阵列的Obj实例){
r=[];
}否则{
r={};
}
用于(Obj中的i){
if(对象为自有财产(i)){

如果(level underline.js提供对象之间的相等性测试。我不使用下划线,我无法向应用程序中添加许多库。也许这-?@zz3599这是一个罕见的实例,当您真正想使用
objectX====objectX
检查对象标识时,并且不想使用lodash之类的东西来检测对象相等性。P可能的复制品