javascript - 计算数组中出现的字符串的另一种方法

标签 javascript

我正在计算包​​含 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/

相关文章:

javascript - 何时以及为何需要 background.html 或 background.js?

javascript - 打印出正则表达式后的最后一个字符

javascript - 如何覆盖 javascript 表单小部件的属性

javascript - JS将列表项颜色与所选项目匹配

javascript - 在 <div> 下方添加 <span>

javascript - 如何实现可拖动的对齐道路多段线?

javascript - 重组 Meteor App

javascript - 无法更改 Cordova 3.5 的 index.html 文件

javascript - 使用 PhantomJS 操作 DOM

javascript - 通过 php 使用 jQuery $.ajax 从 MySQL 检索数据 - 异步问题