我想要统计一个字符串中某个字符出现的次数。
这篇 Stack Overflow 的帖子使用 ES5 实现了这个功能,但没有用 ES6 或 Lodash:
在 Javascript 中统计一个字符串中某个字符的出现次数
然而,我想知道是否有更多 ES6 的方法来实现这一点。也可以接受 Lodash 的解决方案。
我想要统计一个字符串中某个字符出现的次数。
这篇 Stack Overflow 的帖子使用 ES5 实现了这个功能,但没有用 ES6 或 Lodash:
在 Javascript 中统计一个字符串中某个字符的出现次数
然而,我想知道是否有更多 ES6 的方法来实现这一点。也可以接受 Lodash 的解决方案。
这里是一个利用 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。
将字符串分散成数组,然后筛选结果以仅获取您想要的字母。结果数组的长度是该字母出现的次数。
const str = "aabbccaaaaaaaccc";
const result = [...str].filter(l => l === 'c').length;
console.log(result);
Single line es6, uses 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);
count=0;for (let ch of string) { if ch === (target) count++;}
的东西,但那似乎效率低下。同样,您可以将整个字符串拆分成数组,但我看不出有什么意义。 - John C