微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用javascript计算字符串数组中单词的出现次数?

如何解决如何使用javascript计算字符串数组中单词的出现次数?

如果我有这个数组

const arr1 = ["cat","I love cats and I have many cats","dog"]

并运行 arr1.filter(s => s.includes("cat")).length; 结果为 2,因为“cat”包含在 2 个条目中,但有没有办法使结果等于 3?这意味着将计算单词的出现次数,而不是条目。

解决方法

按搜索值拆分字符串。结果将是一个包含比实例数多一个的数组。以这种方式迭代数组中的每个字符串并相应地对计数求和。

const countInstances = (value,arr) => arr.reduce(
  (a,v) => a += v.split(value).length-1,0);

console.log(countInstances('cat',["cat","I love cats and I have many cats","dog"]));

不明显的一点是,如果要拆分的字符串位于要拆分的字符串的开头/结尾,则结果在该结尾处包含一个空字符串:

'something cat'.split('cat'); // ['something ','']
'cat something'.split('cat'); // ['',' something']
'cat'.split('cat') // ['','']

参考:

,

您可以使用正则表达式来搜索多次出现。但是如果搜索词只想是任意字符串,就不必担心正则表达式的转义。您可以使用 indexOf 创建一个简单的计数函数。然后你可以在 reduce to sum 中使用它。

const arr1 = ["cat","dog"];

function count(str,search) {
  let p = 0,c = 0;
  while (true) {
    i = str.indexOf(search,p);
    p = i + 1;
    if (i >= 0) c ++;
    else break;
  } 
  return c;
}

console.log(
  arr1.reduce((a,v) => 
    a += count(v,'cat'),0));

,

您可以在空格上拆分以获取单词,然后搜索您的单词。

const arr1 = ["cat","dog"],searchWord = 'cat',frequency = arr1.reduce((count,str) => {
        const words = str.split(' ');
        const matchedWord = words.filter(word => word.includes(searchWord));
        return count + matchedWord.length;
      },0);
console.log(frequency);

,

您可以使用正则表达式匹配来查找所有匹配项,然后对其进行计数以获得总长度。

let count=0;
const arr1 = ["cat","dog"]
arr1.forEach(s=>{count+=(s.match(/cat/g)||[]).length})
print(count)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?