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);
}
}