Javascript 使用角5查找整个句子中单词的出现次数

Javascript 使用角5查找整个句子中单词的出现次数,javascript,angular,typescript,Javascript,Angular,Typescript,我正在寻找任何合适的解决办法来检查句子中单词的出现次数 输入: k=2 关键词=[“anacell”、“cetracular”、“betacellular”] 评论=[ “Anacell提供全市最好的服务”, “betacellular有很棒的服务”, “anacell提供的最佳服务,每个人都应该使用anacell”, ] 输出: [“anacell”、“betacellular”] 说明: “anacell”出现在2个不同的综述中,“betacellular”仅出现在1个综述中。 输入: k

我正在寻找任何合适的解决办法来检查句子中单词的出现次数

输入:
k=2
关键词=[“anacell”、“cetracular”、“betacellular”]
评论=[
“Anacell提供全市最好的服务”,
“betacellular有很棒的服务”,
“anacell提供的最佳服务,每个人都应该使用anacell”,
]
输出:
[“anacell”、“betacellular”]
说明:
“anacell”出现在2个不同的综述中,“betacellular”仅出现在1个综述中。
输入:
k=2
关键词=[“anacell”、“betacellular”、“cetracular”、“deltacelular”、“eurocell”]
评论=[
“我爱阿纳赛尔最佳服务;阿纳赛尔提供的最佳服务”,
“betacellular有很好的服务”,
“deltacellular提供比betacellular更好的服务”,
“cetracular比anacell差”,
“Betacellular比deltacellular好。”,
]
输出:
[“betacellular”、“anacell”]
说明:

“betacellular”出现在3个不同的评论中。“anacell”和“deltacellular”出现在2篇评论中,但“anacell”在词典中较小。
您可以使用下面的代码查找关键字出现的次数

let map:any
this.keywords.forEach((keyword)=>
{
  let temp=0;
 this.reviews.forEach((review)=>{
   if(review.indexOf(keyword)>-1){
     temp++
    }
 });
  map[keyword]=temp
})

console.log(map['anacell'])
const关键字=[“anacell”、“cetracular”、“betacellular”];
常数审查=[
“Anacell提供全市最好的服务”,
“betacellular有很棒的服务”,
“anacell提供的最佳服务,每个人都应该使用anacell”,
];
让事件=[];
for(关键字的常数kw)
用于(审查的常数rw){
const lower=rw.toLowerCase();
const lower2=kw.toLowerCase();
if(occurrencess.indexOf(lower2)<0&&lower.indexOf(lower2)>=0)
发生。推力(千瓦);
}
console.log(事件)
返回具有相应值的对象数组


使用Jamesmalled更新排序和拼接方法

countKeywords(关键字:string[],评论:string[])=>{
让结果=[];
关键字.forEach(key=>{
让数据={};
data.keyword=key;
data.count=0;
reviews.forEach(review=>{
if(review.toLowerCase().includes(key.toLowerCase())){
data.count+=1;
}
})
结果:推送(数据);
})
返回结果;
}
//分类
结果.排序((a,b)=>{
如果(b.keyword==a.keyword){
返回a.keyword.localeCompare(b.keyword);//如果相等-按字母顺序排序
}
否则{
返回b.keyword-a.keyword//我们要从最高到最低排序
}
});
//基于输入的拼接

结果:拼接(0,k)我不理解这个问题…输入和输出之间的联系是什么?更新了问题,并添加了一个示例。。输入k将定义输出中有多少个值这是否回答了您的问题?将我的答案更新为仅计数评论,而不是关键字出现次数。然后,您可以根据键值对对数组执行任何排序或筛选。如果我只传递anacell和batacellular,它将在数组中显示2个值,对吗?正确。该函数与数据无关,只根据输入的内容输出值。这使得函数可以重用。@Jamesmalled,你能看一下我更新后的答案中的排序和spice吗?对于这个例子,你可能希望递归排序,就像我处理数据一样。第一个排序是基于审阅计数进行排序,如果审阅计数相等,则另一个排序是按字母顺序排列关键字。我也不认为拼接是必要的。我添加了拼接,因为bravo提到k=2表示基于k,它将显示问题示例2中提到的最高数量的数据。在示例2中的输出中,只有2个数据基于从高到低以及字母顺序(如果大小相同),与输入中提到的k=2相同@如果我错了,请纠正我
countKeywords(keywords: string[], reviews: string[]) => {
    let result = [];

    keywords.forEach(key => {
        let data = {};
        data.keyword = key;
        data.review_count = 0;

        reviews.forEach(review => {
            if (review.toLowerCase().includes(key.toLowerCase())) {
                data.review_count += 1;
            }
        })

        result.push(data);
    })

    return result;
}