【发布时间】:2021-04-03 02:24:50
【问题描述】:
我知道有更好的方法来搜索数组,但我真的很想了解在递归调用中找到值时如何返回。找到时记录不是问题,但我似乎无法在找到时让它返回 true。
问题是基本的。使用 for 循环和递归在多维数组中完全搜索一个值,如果找到则返回 true,如果未找到则返回 false。我已经尝试返回递归函数和我能想到的所有其他函数,但没有一个完全有效。
function lookForKey( arr ){
for ( let i = 0; i < arr.length; i++ ) {
if( arr[i] == "key" ){
console.log( "Key found.");
return true;
} else if( Array.isArray( arr[i] ) ){
lookForKey( arr[i] );
}
}
return false;
}
let arr = [
["foo", "bar"],
["foo", "bar", "key"]
];
console.log( lookForKey( arr ) );
感谢您对此的任何见解!
【问题讨论】:
-
您的 else if 不返回。因此,如果递归调用返回 true/false,那么调用者的结果不会做任何事情
-
您是否只在寻找递归解决方案?有很多方法可以做到这一点。
-
@jmargolisvt 他们不是在寻找解决方案。他们希望了解自己做错了什么。
-
谢谢。我知道那是开始。现在我想起来,它完全改变了这个问题。返回递归调用会导致函数在检查第一个数组后返回,因为它不匹配任何条件。我只是不确定如何在第一次调用未找到匹配项后使递归调用继续前一个 for 循环。
标签: javascript arrays for-loop recursion