如何简化JavaScript中判断变量不等于多个值的代码逻辑?
简化元音过滤的实现方式
你想在循环里过滤掉小写元音,不想写一堆&&判断,这确实是个合理的需求——要是以后要排除20个值,堆逻辑运算符太麻烦。
先说说你那行错误代码的问题:("a" && "e" && "i" && "o" && "u") 这种逻辑与运算,会依次判断每个值,最后返回最后一个真值,也就是"u"。所以你的判断其实等价于str[i] !== "u",自然达不到过滤所有元音的效果。
下面给你几种更简洁的实现方式,还能轻松扩展排除列表:
方法1:用字符串的includes方法
把元音存成一个字符串,用includes判断当前字符是否是元音,取反即可:
function filterVowels(str) { let answer = ""; const vowels = "aeiou"; // 要排除的字符都放这里,扩展直接加 for (let i = 0; i < str.length; i++) { if (!vowels.includes(str[i])) { answer += str[i]; } } return answer; // 注意:原代码里return在循环内部,会直接终止循环,要移到外面 }
方法2:用Set提升查找效率
如果要排除的字符很多(比如20个),Set的has方法查找速度比字符串includes更快:
function filterVowels(str) { let answer = ""; const vowelSet = new Set(["a", "e", "i", "o", "u"]); for (let i = 0; i < str.length; i++) { if (!vowelSet.has(str[i])) { answer += str[i]; } } return answer; }
方法3:用正则表达式一行搞定
如果不需要手动写循环,正则替换可以更简洁,直接把所有元音替换为空字符串:
function filterVowels(str) { return str.replace(/[aeiou]/g, ""); }
另外注意你原代码的一个bug:return answer写在了for循环的大括号里,这会导致循环只执行一次就直接返回结果,必须把它移到循环外面才行。
内容的提问来源于stack exchange,提问作者user23333929
相关产品推荐
相关产品推荐

