【问题标题】:Filtering a set of letters from an array in Javascript在Javascript中从数组中过滤一组字母
【发布时间】:2021-10-04 17:26:32
【问题描述】:
我正在尝试使用 .filte() 方法从数组中提取一些元音,但在找到第一个字母的实例后,代码不会在下一个字母上继续。预期的输出是 ['a','a ','i'] 但它只显示 ['a','a']
这是代码
function vowelsAndConsonants(s) {
const letters = s.toString().split("");
console.log(letters);
let vowels = letters.filter((letter) => {
return letter.includes("a", "e", "i", "o", "u");
});
console.log(vowels);
}
vowelsAndConsonants("javascript");
【问题讨论】:
标签:
javascript
arrays
filter
【解决方案1】:
这是获取元音的一种方法
function vowelsAndConsonants(s) {
const letters = s.toString().split("");
let vowels = letters.filter((letter) => {
return ['a', 'e', 'i', 'o', 'u'].indexOf(letter) !== -1
});
console.log(vowels);
}
vowelsAndConsonants("javascript");
【解决方案2】:
include 方法只能有一个参数,参见this website,最简单的测试方法是使用 if 测试值:
const vowels = letters.filter((letter) => {
if (letter === "a" || letter === "e" || letter === "i" || letter === "o" || letter === "u" || letter === "y")
return (letter);
return("");
});
【解决方案3】:
你也可以使用正则表达式。
function vowelsAndConsonants(s) {
const letters = s.toString().split("");
console.log(letters);
let vowels = letters.filter((letter) => {
return /[aeiou]/.test(letter);
});
console.log(vowels);
}
vowelsAndConsonants("javascript");
【解决方案4】:
尊重您的编码逻辑,我只修复了您使用 includes 的问题:)
const allVowels = ["a", "e", "i", "o", "u"]; // what about "y" ?
function vowelsAndConsonants(s) {
const letters = s.toString().split("");
console.log(letters);
let vowels = letters.filter((letter) => {
return allVowels.includes(letter);
});
console.log(vowels);
}
vowelsAndConsonants("javascript");
【解决方案5】:
您可以将字母缩减为 Map 并将出现的字母存储为 Set 或 Array ([])。
const VOWELS = new Set('aeiou'.split(''));
const __charType = (ch) =>
VOWELS.has(ch) ? 'vowels' : 'consonants';
const __resultTemplate = (unique = false) =>
new Map(Object.entries({
vowels: unique ? new Set() : [],
consonants: unique ? new Set() : []
}));
const vowelsAndConsonants = (str, unique = false) =>
str.toLowerCase().split('').reduce((acc, ch) =>
(key =>
acc.set(key, unique
? acc.get(key).add(ch)
: [...acc.get(key), ch]))
(__charType(ch)),
__resultTemplate(unique));
const test1 = vowelsAndConsonants('javascript');
console.log(`Vowels : ${[...test1.get('vowels')].join(', ')}`);
console.log(`Consonants : ${[...test1.get('consonants')].join(', ')}`);
const test2 = vowelsAndConsonants('javascript', true);
console.log(`Vowels : ${[...test2.get('vowels')].sort().join(', ')}`);
console.log(`Consonants : ${[...test2.get('consonants')].sort().join(', ')}`);