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

循环中向JavaScript对象存储键值对:空对象填充逻辑疑问

字母计数函数的填充逻辑解析

以下是你提供的统计句子字母出现次数的JavaScript函数,以及对应的疑问标注:

const wordCounter = (sentence) => {
  let words = {}

  // 此处words对象为空
  for (letter of sentence) {
    
    // 此处words对象仍然是空的,对吗?
    if (letter in words) {
      
      // 第3行初始为空的words对象,未调用存储函数,字母是如何自动存入的?
      words[letter]++
    } else {
      words[letter] = 1
    }
  }
  return words
}

console.log(wordCounter('Help me with this I am confused'))

疑问解答

  • 关于「此处words对象仍然是空的,对吗?」:
    不对。这个for...of循环是逐个遍历句子中的每个字符,第一次循环时words确实是空的,但从第二次循环开始,只要之前处理过的字符已经被存入words,对象就不再是空的。比如第一个字符是'H',会进入else分支,执行words['H'] = 1,此时words就有了第一个键值对,后续循环处理其他字符时,words已经有内容了。

  • 关于「第3行初始为空的words对象,未调用存储函数,字母是如何自动存入的?」:
    不存在自动存入,字母是通过else分支的words[letter] = 1手动存入的。当某个字母第一次被遍历到时,因为它不在空的words对象里,会触发else逻辑,给这个字母对应的键赋值为1,完成存入;之后再遇到同一个字母,就会进入if分支,执行words[letter]++,把该字母的计数加1。

函数输出结果

{ 
  ' ': 6,
  H: 1,
  I: 1,
  a: 1,
  c: 1,
  d: 1,
  e: 3,
  f: 1,
  h: 2,
  i: 2,
  l: 1,
  m: 2,
  n: 1,
  o: 1,
  p: 1,
  s: 2,
  t: 2,
  u: 1,
  w: 1
}

内容的提问来源于stack exchange,提问作者Symply Chima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 13:13:17