我想计算一个字符串中出现的字符数。
这个堆栈溢出帖使用ES5而不是ES6或Lodash:
Count the number of occurrences of a character in a string in Javascript
但是,我想知道是否有更多的ES6方式来做到这一点。 Lodash解决方案也是可以接受的。
答案 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()
const str = "abcabc";
const occurences = Array.from(str, (s, index) =>
({[s]:str.match(new RegExp(s, "g")).length, index}));
console.log(occurences)
&#13;
如果要求只计算
的出现次数一个角色
您可以for..of
循环使用===
,&&
和++
运算符
const [str, char] = ["abc abc", " "];
let occurrences = 0;
for (const s of str) s === char && ++occurrences; // match space character
console.log(occurrences);
&#13;
答案 3 :(得分:1)
单行es6,使用String.prototype.match()
const count = (str, ch) => (str.match(new RegExp(ch, 'g')) || []).length;
console.log(count('abcdefgaaa', 'a'));
&#13;