const str = "askhglhaklsjdlksflkjasf";
// 定义一个字符串变量 'str'
const result = [...str].reduce((r, c) => (r[c]++ || (r[c] = 1), r), {});
// 定义一个名为 'result' 的常量,通过以下方式对 'str' 中的字符进行统计:
// 1. 使用 [...str] 将字符串 'str' 分解成一个字符数组。
// 2. 调用 reduce 方法遍历字符数组,对每个字符进行统计:
// - r 是累加器对象,初始值是一个空对象 {}。
// - c 是当前遍历的字符。
// - r[c]++ 尝试将累加器对象中当前字符 c 的计数值增加 1。
// - 如果字符 c 在累加器对象中尚不存在 (即 r[c] 为 undefined),则 (r[c] = 1) 将其初始化为 1。
// - (r[c]++ || (r[c] = 1), r) 是一个复合表达式,利用逻辑运算符 || 实现条件判断:
// - 如果 r[c] 存在 (即计数值非 0),则执行 r[c]++ 增加计数值。
// - 如果 r[c] 不存在 (即计数值为 0 或 undefined),则执行 r[c] = 1 初始化计数值。
// - 最终返回累加器对象 r。
console.log(result);
// 输出统计结果
- reduce适合于“在给定上下文环境时的逐个处理”的场景
- r[c]++||<dosomething> : 这个语法会在r[c]不存在的时候dosomething,而不会报错
- (r,c)=>([表达式],r) ,这种表达式只会返回最后一个元素,这里是r