我正在计算包含 aa
的字符串在数组中出现的次数。我不认为我的代码有问题。像下面这样
const regex_aa = /aa[^(aa)]?$/s;
let arr = [];
const sstr = ['aa', 'aaaa', 'cc', 'ccc', 'bbb', 'bbaa'];
sstr.filter(e => {
if (regex_aa.test(e)) {
arr.push(e);
}
});
console.log(arr.length);
所以数字是3
,这是正确的。
然而,接下来的工作是统计出现了多少次,那么它看起来像
const regex_aa = /aa[^(aa)]?$/s;
const regex_bb = /bb[^(aa)]?$/s;
let arr1 = [];
let arr2 = [];
const sstr = ['aa', 'aaaa', 'cc', 'ccc', 'bbb', 'bbaa'];
sstr.filter(e => {
if (regex_aa.test(e)) {
arr1.push(e);
}
if (regex_bb.test(e)) {
arr2.push(e);
}
});
console.log(arr1.length, arr2.length);
所以每次如果我想找到一个新字符串的编号,我必须创建一个新的let
,我发现这种方式有点笨拙。有没有更好的解决方案来计算字符串?谢谢
最佳答案
这里使用正则表达式有点过头了 - 相反,通过测试在 .includes
上迭代的字符串是否是您要查找的子字符串,使用 .reduce
进行计数:
const countOccurrences = (arr, needle) => (
arr.reduce((a, haystack) => a + haystack.includes(needle), 0)
);
console.log(countOccurrences(['aa', 'aaaa', 'cc', 'ccc', 'bbb', 'bbaa'], 'aa'));
console.log(countOccurrences(['aa', 'aaaa', 'cc', 'ccc', 'bbb', 'bbaa'], 'bb'));
关于javascript - 计算数组中出现的字符串的另一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58005769/