Javascript 如何在字符串中找到匹配单词的确切数量?

Javascript 如何在字符串中找到匹配单词的确切数量?,javascript,Javascript,对于一个项目,我编写了一个函数,其中包括以下内容: var filtering_words = ['alpha', 'beta', 'gamma']; //finding matching words var prohibited_words = filtering_words; for (var i = 0; i < prohibited_words.length; i++) { if (value.indexOf(prohibited_words[i]) > -1) {

对于一个项目,我编写了一个函数,其中包括以下内容:

var filtering_words = ['alpha', 'beta', 'gamma'];

//finding matching words
var prohibited_words = filtering_words;
for (var i = 0; i < prohibited_words.length; i++) {
  if (value.indexOf(prohibited_words[i]) > -1) {
    user_report['matching_words'].push(prohibited_words[i]);
    user_report['matching_words_amount'] = user_report['matching_words'].length;
  } 
}
var-filtering_-words=['alpha','beta','gamma'];
//查找匹配词
var禁止的单词=过滤单词;
for(变量i=0;i-1){
用户报告['matching_words']。推送(禁止的_words[i]);
用户报告['matching_words_amount']=用户报告['matching_words'].长度;
} 
}
字符串:“alpha-beta-gamma”

现在我只得到所有匹配的单词。 所以我的结果是这样的:['alpha'],['beta'],['gamma']

但我也想知道“过滤词”在我的字符串中的频率。在这种情况下,我想知道实际上有两个beta

有什么想法吗

干杯

您可以使用
reduce()
在字典中填入禁止使用的单词及其频率:

var str = "alpha beta yo alpha beta lorem ipsum gamma alpha", 
    filtering_words = ['alpha', 'beta', 'beta', 'gamma'];

// divide the str into words, then check if a word is prohibited and add (increment) it to the dictionary 
var result = str.split(' ').reduce(function(acc,v)
{
  if (filtering_words.indexOf(v)>=0)
  {
    acc[v] = (acc[v] || 0) + 1; 
  }
  return acc
},{})

console.log(result)
// {alpha: 3, beta: 2, gamma: 1}

此代码为您提供了“不必要”的词语:

让arr=['alpha','beta','gamma','beta'];
对于(设i=0;i
将结果存储在
对象中,而不是存储在
数组中,以便将过滤后的单词映射到出现的次数

要查找出现次数,请使用与获取所有出现次数的数组(对于不区分大小写的搜索,使用
i
标志),然后获取生成的数组长度

var user_report={matching_words:{}
var值='lambdabetaalphabeta'
var筛选_words=['alpha','beta','gamma'];
var禁止的单词=过滤单词;
for(变量i=0;iconsole.log(user_report)
您可以使用
array#filter
查找
值的出现情况
user\u report['matching\u words\u amount']=filtering\u words.filter(word=>word==value.length)。我喜欢这种方式,但遗憾的是,它不能确保我的字符串包含空格作为分隔符。所以我会错过字符串中的结果,比如“lambdabetaalphabeta”。