You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:58:02