JS遍历数组判断元素是否存在时,如何让else分支仅执行一次而非重复触发
问题根因
你当前的实现是把console.log(false)写在了循环内部的不匹配分支中,每遍历到一个不符合的元素就会触发一次打印,只要把最终的结果判断逻辑移到循环外部,就能保证只输出一次结果。
方案1:使用ES6+内置方法Array.includes()(最简单,推荐)
该方法直接返回布尔值表示元素是否存在于数组中,代码如下:
var name = "Karen" var arr = [ "Karen", "Ronald", "Mcdonald" ]; console.log(arr.includes(name))
方案2:使用Array.indexOf()兼容旧版本JS环境
indexOf会返回元素在数组中的下标,找不到对应元素时返回-1,通过判断返回值即可:
console.log(arr.indexOf(name) !== -1)
方案3:手动遍历实现(适合需要自定义匹配规则的场景)
先定义标记变量记录是否找到匹配项,遍历结束后再打印结果:
var isExist = false for (var i = 0; i < arr.length; i++) { if (arr[i] === name) { isExist = true break // 找到匹配项后直接跳出循环,减少不必要的遍历 } } console.log(isExist)
内容的提问来源于stack exchange,提问作者AmandaConda
相关产品推荐
相关产品推荐

