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

时间:2021-01-04 11:43:47

标签: javascript arrays

如果我有这个数组

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

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

4 个答案:

答案 0 :(得分:2)

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

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') // ['', '']

参考:

答案 1 :(得分:0)

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

const arr1 = ["cat", "I love cats and I have many cats", "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));

答案 2 :(得分:0)

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

const arr1 = ["cat", "I love cats and I have many cats", "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);

答案 3 :(得分:-1)

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

let count=0;
const arr1 = ["cat", "I love cats and I have many cats", "dog"]
arr1.forEach(s=>{count+=(s.match(/cat/g)||[]).length})
print(count)
相关问题