使用JavaScript Reduce实现vowelCount函数:对象键值赋值与递增问题
搞定vowelCount函数的reduce实现方案
嘿,看来你选对工具了——用reduce处理这种统计类需求简直完美!我来帮你把缺失的关键逻辑补全,轻松搞定这个函数。
先理清楚我们要做的核心步骤:
- 用一个空对象作为reduce的初始值,用来存每个元音的计数
- 遍历字符串的每个字符,先判断它是不是元音(a、e、i、o、u,这里我默认帮你处理了大小写问题,要是需要区分的话后面说)
- 如果是元音,就更新累加器里的对应键:有值就加1,没值就初始化为1
- 最后返回这个统计好的对象
完整可运行代码
function vowelCount(str) { // 用Set存元音,判断起来更快 const vowels = new Set(['a', 'e', 'i', 'o', 'u']); return str.toLowerCase().split('').reduce((acc, char) => { // 检查当前字符是否是元音 if (vowels.has(char)) { // 核心逻辑:存在则计数+1,不存在则初始化为1 acc[char] = (acc[char] || 0) + 1; } return acc; }, {}); // 初始值传空对象,作为计数的容器 } // 测试示例 console.log(vowelCount('Hello World!')); // 输出: { e: 1, o: 2 } console.log(vowelCount('AEIOUaeiou')); // 输出: { a: 2, e: 2, i: 2, o: 2, u: 2 }
关键逻辑拆解
这里最关键的就是acc[char] = (acc[char] || 0) + 1这句:
acc[char] || 0的作用是兜底:如果当前元音已经在计数对象里了,就用它现有的值;如果还没存过,就用0当默认值- 加1之后再赋值回去,就完成了「计数递增/初始化」的操作
另外,我加了toLowerCase()是为了统一处理大小写——比如字符串里的'A'和'a'会被算作同一个元音。要是你的需求是区分大小写,只需要去掉toLowerCase(),把元音集合改成['a','e','i','o','u','A','E','I','O','U']就行。
如果你已经写了部分代码,只需要把这个判断和赋值的逻辑嵌进去,就能完成这个挑战啦!
内容的提问来源于stack exchange,提问作者Jason Chu
相关产品推荐
相关产品推荐

