Javascript 计算指定列表中关键字的频率
我试图计算特定关键字在字符串中出现的次数。让我们假设我有一个字符串,我想计算几个关键字在字符串中出现的次数。这些关键字存储在一个列表中。程序计算一个字出现的次数后,将其存储在数组中 我已经编写了以下程序Javascript 计算指定列表中关键字的频率,javascript,Javascript,我试图计算特定关键字在字符串中出现的次数。让我们假设我有一个字符串,我想计算几个关键字在字符串中出现的次数。这些关键字存储在一个列表中。程序计算一个字出现的次数后,将其存储在数组中 我已经编写了以下程序 var para = "I code code code Javascript" var keywords = ['code',"I"]; var arr = []; for(let i = 0; i < keywords.length; i++){ arr[i] = (pa
var para = "I code code code Javascript"
var keywords = ['code',"I"];
var arr = [];
for(let i = 0; i < keywords.length; i++){
arr[i] = (para.match(/keywords[i]/g) || []).length;
}
var para=“I代码Javascript”
var关键字=[‘代码’,“I”];
var-arr=[];
for(设i=0;i
关键字[i]似乎不起作用解决这一问题的方法是首先创建正则表达式…因为
string.match(regex)
接受正则表达式作为第一个参数,但您将字符串关键字[i]
作为模式传递(该模式将返回0
,因为该字符串在para
上不存在)为此,我们首先使用构造函数创建要匹配的正则表达式,然后将其传递给string.match(regex)
:
var para=“I代码Javascript”
var关键字=[‘代码’,“I”];
var-arr=[];
for(设i=0;i }
您可以使用Array.prototype.reduce
创建一种计数映射:
const getKeywordCount=(s,关键字)=>{
返回s.split(“”).reduce((累计,字)=>{
if(关键字。包括(word)){
累计[字]=累计[字]?累计[字]+1:1;
}
返回累计;
}, {});
};
log(getKeywordCount(“I code Javascript”、['code'、“I”]))
为什么不干脆拆分sting呢
let para = "I code code code Javascript";
let sentence = para.split(' ');
let keywords = ['code','I'];
let arr = [];
sentence.forEach(function (element1) {
let count = 0;
keywords.forEach(function (element2) {
if(element1 === element2) count++;
});
arr.push(count);
console.log(count);
});
这很有效
function count(...arg) {
var para;
var keywords = [];
var t = 0;
arg.forEach(e => {
if (t == 0) {
para = e;
} else {
keywords.push(e);
}
t++;
});
for (let i = 0; i < keywords.length; i++) {
para += '';
let subStr = keywords[i].replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
let f = (para.match(new RegExp(subStr, 'gi')) || []).length;
console.log("Frequency of " + keywords[i] + " : " + f);
}
}
count("I code code code Javascript", 'code', 'I');
//call count like count("paragraph","keyword1","keyword2",...);
函数计数(…arg){
var-para;
var关键字=[];
var t=0;
参数forEach(e=>{
如果(t==0){
para=e;
}否则{
关键词:推(e);
}
t++;
});
for(设i=0;i
若要返回计数数组,可以执行以下操作:
const getCounts=(关键字,段落)=>
关键词.map(k=>para.match(新的RegExp(k,'g')).length)
var para=“I代码Javascript”
var关键字=[‘代码’,“I”];
控制台日志(
getCounts(关键字,段落)
)
我个人更喜欢这个答案,因为它不使用正则表达式。为什么要使用${keywords[I]}
而不是新的RegExp(keywords[I],'g')
,真的没有什么好处。这个答案需要映射
调用。@epascarello-true,虽然regExp
只接受一个字符串
,但是如果关键字
包含一个数字
,它将被转换。你本可以建议编辑一次,“编码的”
会被计算在内吗?'HI'
中的'I'
会被计算吗?还是只需要整词匹配?