判断数组不含指定元素时,if语句返回undefined问题排查
数组遍历过滤逻辑的问题排查
你的代码里的条件判断逻辑有两个关键错误,导致完全达不到你想要的过滤效果:
错误点分析
- 运算符优先级搞错了:
!word === "users"并不是判断word不等于"users",因为!的优先级比===高,实际执行的是(!word) === "users"——也就是先把word转成布尔值取反,再和字符串"users"比较,这显然和你的预期完全不符。 - 逻辑或的用法错误:
|| "_id" || "word"这种写法毫无意义,因为非空字符串在JS里是真值,不管前面的条件是什么,整个表达式的结果都会是true,等于所有元素都通过了判断,自然会被全部打印出来。
正确的实现方式
推荐用排除列表的方式来写,这样代码更简洁易维护:
let arr = ["noun","nounoffensive","nounvulgar","adjective","verb","verbinformal","conjunction","exclamation","users","_id","word","createdAt","updatedAt","__v"]; // 把要排除的项统一放在数组里 const excludedItems = ["users", "_id", "word", "createdAt", "updatedAt"]; arr.forEach((word) => { // 判断当前元素不在排除列表里就打印 if (!excludedItems.includes(word)) { console.log(word); } });
如果你不想用数组,也可以直接写多个不等于的条件,但要注意用**逻辑与(&&)**而不是或(||),因为需要同时满足"不等于所有排除项":
let arr = ["noun","nounoffensive","nounvulgar","adjective","verb","verbinformal","conjunction","exclamation","users","_id","word","createdAt","updatedAt","__v"]; arr.forEach((word) => { if (word !== "users" && word !== "_id" && word !== "word" && word !== "createdAt" && word !== "updatedAt") { console.log(word); } });
这两种写法都能正确过滤掉你指定的那些元素,只打印剩下的项。
内容的提问来源于stack exchange,提问作者Scott Enock
相关产品推荐
相关产品推荐

