如何正确处理checkifHaveBomb函数的return语句并优化写法?
数组查找炸弹的函数优化
现有代码实现
当前可用写法
const checkifHaveBomb = (column, row) => { let isBomb = false activeBombContainer.forEach(element => { if (element.column === column && element.row === row) { isBomb = true; return; } }) if (isBomb) return true; else return false; }
首次尝试(未生效)
const checkifHaveBomb = (column, row) => { activeBombContainer.forEach(element => { if (element.column === column && element.row === row) { return true; } }) return false; }
问题原因
你对return作用域的判断完全正确:forEach的回调函数是独立作用域,回调里的return只会终止当前回调的执行,不会跳出外层的checkifHaveBomb函数,所以首次尝试里的return true根本不会影响外层函数的返回值,最终函数总会走到return false。
更优写法
直接使用数组原生的some方法,该方法会遍历数组,找到第一个符合条件的元素后立即终止遍历并返回true,遍历完成未找到匹配项则返回false,完全贴合你的需求:
// 基础写法 const checkifHaveBomb = (column, row) => { return activeBombContainer.some(element => { return element.column === column && element.row === row; }); } // 简化为隐式返回的箭头函数 const checkifHaveBomb = (column, row) => activeBombContainer.some(element => element.column === column && element.row === row );
另外,你当前可用写法里的if (isBomb) return true; else return false;可以直接简化为return isBomb;,因为isBomb本身就是布尔值,无需额外判断。
内容的提问来源于stack exchange,提问作者NicolaL1995
相关产品推荐
相关产品推荐

