Skip to content

一、统计字符串出现的次数

  • 统计下列字符串每个字符出现的频率
js
  var str = 'adadasdasdsada';

题解:

  • 大众写法

    js
      var str = 'adadasdasdsada';
      var result = {};
      for(var i = 0; i < str.length; i++) {
        if (result[str[i]]) {
          result[str[i]]++;
        } else {
          result[str[i]] = 1
        } 
      }
      console.log(result)
  • 采用reduce函数

    • reduce:凡是遍历需要累计的东西都可以使用reduce
    • 最初版
      js
       var str = 'adadasdasdsada';
       var result = str.split('').reduce(function(a, b) {
         if (a[b]) {
            a[b]++;
         } else {
            a[b] = 1;
         } 
         return a; 
       }, {})
       console.log(result)
    • 改造if
      js
       var str = 'adadasdasdsada';
       var result = str.split('').reduce(function(a, b) {
         if (!a[b]++) {
            a[b] = 1;
         }
         return a; 
       }, {})
       console.log(result)
    • 去掉if
      js
       var str = 'adadasdasdsada';
       var result = str.split('').reduce(function(a, b) {
         a[b]++ || (a[b] = 1);
         return a; 
       }, {})
       console.log(result)
    • 再简化,使用括号运算符,括号运算法里面可以写任意东西,一定会返回最后一个,前面全部运算一遍
      js
       var str = 'adadasdasdsada';
       var result = str.split('').reduce(function(a, b) {
         return (a[b]++ || (a[b] = 1), a);
       }, {})
       console.log(result)
    • 既然是一条语句,就可以使用箭头函数
      js
       var str = 'adadasdasdsada';
       var result = str.split('').reduce((a, b) => (a[b]++ || (a[b] = 1), a), {})
       console.log(result)

Released under the MIT License.