使用带多条件的filter方法无法移除数组中的元音字母该如何解决
问题原因
你当前的逻辑错误出在条件运算符的选择上:你使用了或运算符(||),对任意字符来说,永远会满足「不等于某个元音」的条件:
比如判断字符a时,l !== 'a'为假,但l !== 'e'为真,整个条件最终返回真,a会被保留下来,最终所有元素都会通过过滤,数组不会发生变化。
修复方案
方案1:修改逻辑运算符为与运算符(&&)
只有当字符同时不等于所有元音字母时,才会被保留:
wordArr = ['a', 'g', 'e', 'f']; wordArr = wordArr.filter(function(l){ return l !== 'a' && l !== 'e' && l !== 'i' && l !== 'o' && l !== 'u'; });
运行后wordArr的结果就是你需要的['g', 'f']。
方案2:使用数组/Set的判断方法简化代码
当需要判断的条件较多时,把匹配项提前存入集合,代码可读性和可维护性更高:
// 用Set存储元音,has方法查找效率更高 const vowels = new Set(['a', 'e', 'i', 'o', 'u']); wordArr = ['a', 'g', 'e', 'f']; wordArr = wordArr.filter(l => !vowels.has(l));
也可以用普通数组的includes方法实现:
const vowels = ['a', 'e', 'i', 'o', 'u']; wordArr = ['a', 'g', 'e', 'f']; wordArr = wordArr.filter(l => !vowels.includes(l));
内容的提问来源于stack exchange,提问作者solid_soap
相关产品推荐
相关产品推荐

