循环中向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
相关产品推荐
相关产品推荐

