如何解决如何使用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 举报,一经查实,本站将立刻删除。