【发布时间】:2020-03-21 09:33:54
【问题描述】:
我正在尝试以递归方式在对象数组中查找项,然后重建相同的数组,但其中没有找到的项。找到该项目后,我想将其从参考数组中拼接出来。以下是我的尝试,但不幸的是它根本不起作用。
var tt = [{ age : 4, els : [{ age : 12, els : [] },{ age : 32, els : [{ age :44, els :[] },{ age : 100, els : [ { age: 3, els : [], age : 22, els : [{ age : 13, els : []},{ age : 99, els : []},{ age : 88, els : [{ age : 16, els : [] }]}] } ] }] }] },{ age: 223, els : [] },{ age : 120, els : [{ age :300, els : [] },{ age :301, els : [{ age : 400, els : [] }] }] }];
kk = [];
var test = function(els){
for( var i = 0; i < els.length; i++ ){
if( els[i].age == 400 ){
console.log('found');
console.log(els[i]);
return;
}else{
kk.push(els[i]);
test(els[i].els);
}
}
}
console.log( tt ) // -- show original array
console.log( test(tt) ); // -- show found item
console.log( kk ); // -- show new array without the newly found item
【问题讨论】:
-
让函数改变一个硬编码的
kk不是一个好主意——如果你想让函数检索匹配的元素并产生一个过滤的版本,我的建议是返回一对值一个东西。我建议修改您的设计或explaining why you need to follow such an unusual requirement。除此之外,当删除与谓词匹配的元素时,子元素会发生什么?多个元素匹配谓词时应该怎么做? -
另外,当你说“拼接”时,这表明你想要改变原件。这是意图还是您想要一个全新的副本?如果您正在变异,返回副本似乎没有任何好处,因此要求似乎有点矛盾。感谢您的澄清!
-
@ggorlen 我的目标只是找到一个项目并将其从数组中删除。
-
好的,明白了。谢谢。
标签: javascript arrays recursion tree javascript-objects