使用OR运算符排除数组元素时逻辑错误,求原因及解决方法
问题分析与解决
嘿,这个逻辑判断的小坑真的很容易踩!咱们来拆解下你的问题出在哪:
你写的条件是:
if (arr[page] !== "page-name" || arr[page] !== "some-more")
这里用了逻辑或(||),但这个条件永远都会成立——因为任何一个页面名称,不可能同时等于"page-name"和"some-more",所以不管当前页面是哪一个,要么不等于前者,要么不等于后者,结果永远是true,自然所有页面都被打印出来了。
你真正想要的逻辑是:当前页面既不是"page-name",也不是"some-more",这时候应该用逻辑与(&&),或者换一种更易维护的写法。
修正方案1:修改逻辑运算符
把||换成&&,这样只有当两个条件都满足时(既不是要排除的第一个页面,也不是第二个),才会执行输出:
var arr = ["page-name", "page-name-two", 'page-3', 'some-more', 'another-page']; for (var page in arr) { if (arr[page] !== "page-name" && arr[page] !== "some-more") { console.log(arr[page]) } }
修正方案2:用数组includes优化(更易扩展)
如果以后要排除更多页面,一个个写!==会很麻烦,可以把要排除的页面放进一个数组,然后用includes判断:
var arr = ["page-name", "page-name-two", 'page-3', 'some-more', 'another-page']; var excludedPages = ["page-name", "some-more"]; for (var page in arr) { if (!excludedPages.includes(arr[page])) { console.log(arr[page]) } }
这样以后加排除项,只需要往excludedPages数组里加元素就行,代码更简洁。
两种方案执行后,都会输出你期望的结果:
page-name-two page-3 another-page
内容的提问来源于stack exchange,提问作者Amit
相关产品推荐
相关产品推荐

