JavaScript数组遍历统计字符:if(!chars[word])作用及计数原理
字符计数代码逻辑详解
一、if(!chars[word])的逻辑说明
先提个细节:代码里的循环变量word命名有误导性,它实际代表的是单个字符,不是单词。
chars是用来存储计数的空对象,chars[word]是访问该对象中以当前字符为键的属性值:
- 第一次遇到某个字符时,
chars里还没有对应属性,此时chars[word]返回undefined(JS中访问对象不存在的属性会返回这个值)。 !是逻辑非运算符,!undefined结果为true,所以会进入if块,把chars[word]赋值为1,完成该字符的计数初始化。- 补充:如果某个字符的计数是0(这段代码里不会出现),
!0也会返回true,但因为我们只在首次出现时设为1,后续都是累加,所以不会触发这种场景。
二、整体计数功能的实现步骤
这段代码通过以下几步完成字符统计:
- 定义待处理的字符串
str,包含重复字符、空格和大小写字母(注意大小写敏感,比如W和w会被当作不同字符统计)。 - 创建空对象
chars,用来存计数结果——键是字符本身,值是该字符的出现次数。 - 调用
str.split('')把字符串拆成单个字符组成的数组arr,比如"hello"会被拆成['h','e','l','l','o']。 - 用
for...of循环遍历数组arr里的每一个字符(即代码里的word变量)。 - 循环内的判断逻辑:
- 如果当前字符在
chars中还没有对应计数(chars[word]为假值),就初始化计数为1; - 如果已经有计数,就把计数加1(
chars[word]++)。
- 如果当前字符在
- 最后通过
console.log(chars)打印所有字符的统计结果,空格、h、e等字符的出现次数都会被展示。
内容的提问来源于stack exchange,提问作者Swati
相关产品推荐
相关产品推荐

