Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 跟踪对象中的深度_Javascript_Angularjs - Fatal编程技术网

Javascript 跟踪对象中的深度

Javascript 跟踪对象中的深度,javascript,angularjs,Javascript,Angularjs,我有以下代码作为示例: var someObject = { id:'a', l1:{ id:'b', l2:null } }; var pointer = someObject; // seq = abc function doSomething(seq) { while() { Step 1: seq.charAt(0) is a === l0.id, therefore pointer = someObje

我有以下代码作为示例:

var someObject = {
    id:'a',
    l1:{
        id:'b',
        l2:null
    }
};

var pointer = someObject;
// seq = abc
function doSomething(seq) {
    while() {
        Step 1: seq.charAt(0) is a === l0.id, therefore pointer =  someObject.l1;
        Step 2: seq.charAt(1) is b === l1.id, therefore pointer =  pointer.l2;
        Step 3: seq.charAt(2) is c !== l2.id, therefore:
            pointer = { id: c, l3:null}
    }
}
abc
上运行doSomething之后,我希望
someObject
看起来像:

var someObject = {
    id:'a',
    l1:{
        id:'b',
        l2:{
            id:'c',
            l3:null
        }
    }
};
所以问题是,我如何以最有效的方式跟踪我在
someObject
中的位置?或者实际上是否有可能跟踪
指针


编辑:用纯Javascript甚至angular都可以。请不要jQuery:)

好的,我想出来了。我完全没有注意到这一点,但是任何递归调用都会保留“指针”。我必须修改对象的方式:

var someObject = {
    id:'a',
    l:{
        id:'b',
        l:{}
    }
};
当然,就本例而言,seq将始终添加到对象中已有的内容上。也就是说,如果a>b>c,那么seq将始终匹配“abc”+任何额外的内容,例如“abcd”

正如你所看到的,我们能够保留对指向的原件的引用,而不是副本

输出:
{id:'a',l:{id:'b',l:{id:'c'}}}

如果有人认为这是一种不好的方法,或者有更好的方法,请让我知道:)

function doSomething(seq, index, obj) {
    if(seq.charAt(index) === obj.id) {
        obj = obj.l;
        index++;
        doSomething(seq, index, obj)
    } else {
        obj.id = seq.charAt(index);
    }
}