Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算指定列表中关键字的频率_Javascript - Fatal编程技术网

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'
会被计算吗?还是只需要整词匹配?