Javascript 如何迭代所有子元素并返回找到的元素?
我有一个find()函数,它在嵌套结构中按标记名查找元素。我尝试在所有子元素中查找匹配的元素Javascript 如何迭代所有子元素并返回找到的元素?,javascript,typescript,Javascript,Typescript,我有一个find()函数,它在嵌套结构中按标记名查找元素。我尝试在所有子元素中查找匹配的元素 function find(tag: string) { let children = data.children; for(let i = 0; i <= children.length; i++) { if (children[i].type == 0 && children[i].tag == tag) {
function find(tag: string) {
let children = data.children;
for(let i = 0; i <= children.length; i++) {
if (children[i].type == 0 && children[i].tag == tag) {
return children[i];
} else {
if (children[i].children) {
children = children[i].children;
}
}
}
}
我也试过这个:
function find(tag: string) {
let children = data.children;
let found;
return function() {
for(let i = 0; i < children.length; i++) {
if (children[i].tag == tag) {
return;
}
if (children[i].children) {
children = children[i].children;
}
}
}
}
let a = find('tag');
let result = a();
console.log(result);
函数查找(标记:字符串){
让children=data.children;
让发现;
返回函数(){
for(设i=0;i
如果(children[i]){children=children[i];}没有找到,你就把整个循环设置成一个元素,去掉它,同样在for循环中也应该这样做如果(children[i]){children=children[i];}没有找到,你就把整个循环设置成一个元素,同样在for循环中应该做i主要问题:
- 您需要使用
主要问题:
- 您需要使用
循环保留found,我得到typescipt错误,该变量从未读取,并且我无法将子项重新分配给子项[I]。xhildren@jony你移除了最后一部分了吗最后一部分是什么?@joey如果(children[i]){children=children[i];},@joey确切地说,把它拿出来,那就是问题的原因了。找到了什么,我得到了typescit错误,该变量从未读取,我无法将子项重新分配给子项[I]。xhildren@jony你把最后一部分拿走了吗?那最后一部分呢?@joey如果(children[i]){children=children[i];},@joey确切地说,把它拿出来,那就是问题的根源谢谢你,是否可以只使用while循环来编写此代码?递归停止条件在哪里?在我看来,为
循环保留比在这里使用
更好。递归停止条件是while
:每个递归调用都会将结果返回到上一个函数,如果找到了某个对象,该函数就会返回结果(return
将停止执行函数的其余代码)。为什么在if-else条件下使用return
,不是在外循环?因为此代码返回找到的第一个结果,当我们在子对象上循环时,我们希望在找到某个对象后立即停止函数执行,否则它将检查下一个子对象,并且对于此子对象,if(found)
可能会变为false,然后我们将没有结果非常感谢,是否可以只使用while循环来编写此代码?递归停止条件在哪里?在我看来,为found
比在这里使用
更好。递归停止条件是while
:每个递归调用都会将结果返回到上一个函数,如果找到了某个对象,该函数就会返回结果(return
将停止执行函数的其余代码)。为什么在if-else条件下使用return
,非外部-内部循环?因为此代码返回找到的第一个结果,当我们在子对象上循环时,我们希望在找到某个对象后立即停止函数执行,否则它将检查下一个子对象,并且对于此子对象,if(found)
可能会变为false,然后我们将没有结果found
function find(tag: string) { let children = data.children; let found; return function() { for(let i = 0; i < children.length; i++) { if (children[i].tag == tag) { return; } if (children[i].children) { children = children[i].children; } } } } let a = find('tag'); let result = a(); console.log(result);
- 您需要使用