统计字符数
统计字符串 str
中每个字符出现的次数,并将结果存储在一个对象 result
中。
通过遍历字符串 str
,对每个字符进行统计。如果该字符已经在 result
对象中出现过,则将对应的计数器加 1;否则将该字符添加到 result
对象中,并将计数器初始化为 1。
这里使用三元运算符来实现简单的逻辑判断。如果 result[str[i]]
的值为 0 或者 undefined
,则将其初始化为 1;否则将其加 1。
最终,result
对象中的键值对表示了字符串 str
中每个字符出现的次数。例如,如果 str
为 "hello"
,则 result
对象应该为 { h: 1, e: 1, l: 2, o: 1 }
。
传统写法
使用传统的 for 循环,代码如下:
const str = `adadfdfsdfsa`;
const result = {};
for (let i = 0; i < str.length; i++) {
result[str[i]] ? result[str[i]]++ : (result[str[i]] = 1);
}
console.log(result); // { a: 3, d: 4, f: 3, s: 2 }
这里使用了三元运算符来判断对象中是否已经存在该字符的计数器,如果存在则将计数器加 1,否则将该字符添加到对象中,并将计数器初始化为 1。
reduce 方法
另一种实现方式是使用数组的 reduce 方法,代码如下:
const str = `adadfdfsdfsa`;
const arr = str.split("");
const result1 = arr.reduce((a, b) => {
if (a[b]) {
a[b]++;
} else {
a[b] = 1;
}
return a;
}, {});
console.log(result1); // { a: 3, d: 4, f: 3, s: 2 }
这里将字符串 str 转换为字符数组 arr,然后使用 reduce 方法对数组进行遍历和计数。在 reduce 方法的回调函数中,判断对象中是否已经存在该字符的计数器,如果存在则将计数器加 1,否则将该字符添加到对象中,并将计数器初始化为 1。
reduce 方法的简化写法
另外,还可以使用 reduce 方法的简化写法,代码如下:
const str = `adadfdfsdfsa`;
const result2 = arr.reduce((a, b) => (a[b] ? a[b]++ : (a[b] = 1), a), {});
console.log(result2); // { a: 3, d: 4, f: 3, s: 2 }
这里使用了括号运算符,将判断和赋值操作合并到了一个表达式中,使得代码更加简洁。