ES6 / lodash计算字符串中字符的出现次数

时间:2017-07-30 22:05:47

标签: javascript ecmascript-6 lodash

我想计算一个字符串中出现的字符数。

这个堆栈溢出帖使用ES5而不是ES6或Lodash:

Count the number of occurrences of a character in a string in Javascript

但是,我想知道是否有更多的ES6方式来做到这一点。 Lodash解决方案也是可以接受的。

4 个答案:

答案 0 :(得分:13)

这是一个lodash解决方案:

const count = (str, ch) => _.countBy(str)[ch] || 0;

console.log(count("abcadea", "a"));
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

解决方案看起来很紧凑,不使用正则表达式,但仍可在单次扫描中完成工作。它必须非常快,但如果性能非常重要,那么最好选择好的旧for循环。

更新:另一种基于lodash的解决方案:

const count = (str, ch) => _.sumBy(str, x => x === ch)

console.log(count("abcadea", "a"));
<script src="https://cdn.jsdelivr.net/lodash/4.17.4/lodash.min.js"></script>

答案 1 :(得分:6)

我认为它不比RegExp解决方案好,但它是ES6。

将字符串传播到数组,并过滤​​结果以仅获取所需的字母。结果数组的长度是该字母出现次数。

const str = "aabbccaaaaaaaccc";

const result = [...str].filter(l => l === 'c').length;

console.log(result);

答案 2 :(得分:1)

您可以使用Array.from()RegExp构造函数和String.prototype.match()

&#13;
&#13;
const str = "abcabc";

const occurences = Array.from(str, (s, index) => 
                     ({[s]:str.match(new RegExp(s, "g")).length, index}));

console.log(occurences)
&#13;
&#13;
&#13;

如果要求只计算

的出现次数
  

一个角色

您可以for..of循环使用===&&++运算符

&#13;
&#13;
const [str, char] = ["abc abc", " "];

let occurrences = 0;

for (const s of str) s === char && ++occurrences; // match space character

console.log(occurrences);
&#13;
&#13;
&#13;

答案 3 :(得分:1)

单行es6,使用String.prototype.match()

&#13;
&#13;
const count = (str, ch) => (str.match(new RegExp(ch, 'g')) || []).length;

console.log(count('abcdefgaaa', 'a'));
&#13;
&#13;
&#13;