我将以下代码作为示例:
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
我在哪里?或者实际上是否可以跟踪pointer
?
编辑:在纯Javascript甚至角度很好。请不要jQuery:)
答案 0 :(得分:0)
好的,我明白了。我完全错过了这个,但任何递归调用都会保留“指针”。作为一个例子,这是代码的答案。我确实需要修改对象的方式:
var someObject = {
id:'a',
l:{
id:'b',
l:{}
}
};
当然,仅仅为了这个例子,seq总是会添加到对象中已经存在的东西。也就是说,如果a> b> c,则seq将始终匹配“abc”+任何额外的,例如。 “ABCD”
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);
}
}
如您所见,我们能够保留对尖头原件的引用而不是副本。
输出:{ id: 'a', l: { id: 'b', l: { id: 'c' } } }
如果有人认为这是一种不好的方式,或者有更好的方法,请告诉我:)