用JS读取出 arr 字符串中每个字母重复出现的次数 ?

var arr='asfacfagsahvahvxssaaxssxs';

var info = arr
     .split('')
     .reduce( (p,k) => (p[k]++ || (p[k]=1) ,p ),{});

console.log(info);

三行代码就算出来了? 萌新一脸懵逼

阅读 3k
3 个回答

关键就是那个reduce啦,没啥神奇的。
reduce里面传入了一个空对象,迭代每个字符的时候,把单个字符作为对象的key一直累加,最后输出这个对象。


你可以把它展开,然后单步运行,看看每一步是怎么操作的,这样比较明显,下面就是它展开的样子:

var str='asfacfagsahvahvxssaaxssxs';
var arr = str.split('');
var info = arr
     .reduce( (p,k) => {
         if (p[k]) {
             p[k]++
         } else {
             p[k]=1
         }
         return (p);
     }, {});

只不过是语法糖多了罢了,实际上就是循环加上计数

字符串分割split('')以及数组的reduce()方法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题