JavaScript使用filter方法提取数组元音仅返回部分匹配结果如何解决
故障根因
你代码的问题出在String.prototype.includes()方法的使用逻辑错误:
- 该方法仅支持两个入参:第一个参数是要查找的单个目标字符串,第二个参数是可选的搜索起始位置下标
- 你传入
letter.includes("a", "e", "i", "o", "u")时,只有第一个参数"a"会被当作匹配目标,后续的"e"、"i"等参数会被直接忽略,所以只有字母a能被匹配,javascript里的第三个元音i无法被识别,最终结果就少了一个元素。
修复代码
调整判断逻辑,把元音字母存入数组后调用数组的includes方法判断当前字母是否属于元音即可:
function vowelsAndConsonants(s) { const letters = s.toString().split(""); console.log(letters); // 定义元音数组,判断当前字母是否在数组内 const vowelList = ['a', 'e', 'i', 'o', 'u'] let vowels = letters.filter((letter) => { return vowelList.includes(letter); }); console.log(vowels); // 输出 ['a','a','i'] 符合预期 } vowelsAndConsonants("javascript");
也可以用正则匹配实现更简洁的写法:
let vowels = letters.filter(letter => /[aeiou]/.test(letter))
内容的提问来源于stack exchange,提问作者Ian Andwati
相关产品推荐
相关产品推荐

