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



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

这个堆栈溢出帖子使用 ES5 而不是 ES6 或 Lodash 来做到这一点:

计算字符串中字符在 Javascript 中的出现次数

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

这是一个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>

我不认为它比正则表达式解决方案更好,但它是 ES6。

将字符串扩展到 and 数组,并筛选结果以仅获取所需的字母。生成的数组的长度是该字母出现的次数。

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

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

const count = (str, ch) => (str.match(new RegExp(ch, 'g')) || []).length;
console.log(count('abcdefgaaa', 'a'));

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

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

如果要求是仅计算

一个角色

您可以将for..of循环与===&&++运算符

一起使用

const [str, char] = ["abc abc", " "];
let occurrences = 0;
for (const s of str) s === char && ++occurrences; // match space character
console.log(occurrences);

最新更新