使用forEach重写droids函数遇到语法及应用问题寻求帮助
现有代码的问题
- forEach内部没有写判断逻辑:你只在forEach里打印了初始为空的
result变量,既没有对比遍历到的元素是不是Droids,也没有给result做任何赋值,遍历完全没起作用。 - 条件判断写的是赋值不是比较:
if (result = "Droids")里用的是单等号=,这是赋值操作,会直接把result改成Droids,不管数组里有没有对应内容,这个判断都会成立,永远返回找到的结果。 - 没考虑forEach不能提前终止的特性:原来的for循环找到Droids就直接return跳出函数了,但forEach里写return只能跳出当前这一次的遍历回调,会继续遍历剩下的元素,也没法直接终止外层的droids函数,所以需要单独加个变量标记有没有找到目标。
正确实现代码
function droids(arr) { let hasDroids = false; arr.forEach(item => { if (item === 'Droids') { hasDroids = true; } }) return hasDroids ? 'Found Droids!' : "These are not the droids you're looking for."; } // 测试用例 const starWars = ["Luke", "Finn", "Rey", "Kylo", "Droids"] const thrones = ["Jon", "Danny", "Tyrion", "The Mountain", "Cersei"] console.log(droids(starWars)) // 预期输出: "Found Droids!" console.log(droids(thrones)) // 预期输出: "These are not the droids you're looking for."
内容的提问来源于stack exchange,提问作者John Belknap
相关产品推荐
相关产品推荐

