Javascript 函数查找单词在句子中以结尾的最常见字母

Javascript 函数查找单词在句子中以结尾的最常见字母,javascript,Javascript,我试图找到一个句子中大多数单词以哪个字母结尾,以及所有以这个字母结尾的单词 这是我的家庭作业,我尝试过分割功能,但没有帮助,切片功能,但时间太长 var sentence = 'Down by the river there is a man that quiver and shiver, but he needs to deliver a packet that he think is a big racket and a packet of of gum.' function mostWo

我试图找到一个句子中大多数单词以哪个字母结尾,以及所有以这个字母结尾的单词

这是我的家庭作业,我尝试过分割功能,但没有帮助,切片功能,但时间太长

var sentence = 'Down by the river there is a man that quiver and shiver, but he needs to deliver a packet that he think is a big racket and a packet of of gum.'

function mostWordsEndsWith (){
    for (var i = 0; i < wordsEndsWith.length; i++) {
        var currentWord = wordsEndWith[i].split('t')
        console.log(currentWord);
    }
 }
 mostWordsEndsWith(sentence);
var-sense=“河边有个男人浑身颤抖,但他需要送一包他认为是大球拍和口香糖的东西。”
函数mostWordsEndsWith(){
for(var i=0;i
以下是一种方法。请注意,它使用了几个ES6功能,以防兼容性出现问题

var-station=“河边有一个人在颤抖”
+“颤抖,但他需要送一包”
+“他认为这是个大骗局”
+“口香糖的。”
函数mostWordsEndsWith(str){
//索引:字母-->{count,words}
//这本身就是一个很好的对象,但还不是
//期望的最终结果
让endLetterCount=
//获取单词数组
str.match(/\b\w+\b/g)
//添加关于上一封信的信息。
//没有错误处理,但是查看
//以前,一定是出了什么问题
//因为它不匹配。
.map((w)=>({
字:w,
最后:w.match(/(\w)(?:[^\w]|$)/)[1]
}))
//创建索引
.减少((p,c)=>{
如果(p.hasOwnProperty(c.last)){
p[c.last].count++;
p[c.last].words.push(c.word);
}else p[c.last]={count:1,words:[c.word]};
返回p;
},
//丑陋,你好。。。
//关于为什么要使用这些对象,人们进行了长时间的讨论
//默认情况下,不要这样做,也不要太多
//与这个问题有关。
{
[符号.迭代器]:函数*(){
//这里我们确切地知道物体是什么,
//因此,有关“自有财产”的问题是
//不存在
用于(此中的道具)
产生{key:prop,value:this[prop]};
}
});
//获取计数最高的字母
让highestCount=[…endLetterCount]。减少(
(p,c)=>c.value.count>p.value.count?c:p
);
//返回一些好的输出格式,不管需要什么。
return`Letter“${highestCount.key}”出现最多`
+`${highestCount.value.count}次:`
+`${highestCount.value.words}.`;
}
log(mostWordsEndsWith(句子))
让句子=“河边有个男人在颤抖,但他需要送一包他认为是大球拍和口香糖的东西。”;
让单词=句子。匹配(/(\w+)/g);
让字母={};
//创建一个包含单词和最后一个单词的对象数组
words=words.map(函数(word){
返回{
字:字,
最后一个字母:word.slice(-1)
}
});
//添加letters对象中每个字母的出现次数
words.forEach(函数(elem){
字母[elem.lastLetter]=字母[elem.lastLetter]| | 0;
字母[elem.lastLetter]+;
});
//对字母对象进行排序并取第一个字母
让mostPresentLetter=Object.keys(字母).sort(函数a,b){
返回字母[b]-字母[a]
})[0];
//显示最新的字母
console.log(“最新字母:+mostpresetter”);
//显示所有字母。地图仅用于显示单词
console.log(“Words:”+Words.filter(函数(项)){
return item.lastLetter==mostPresenter;
}).map(功能(o){
返回o.word;

}));这里有一个非常简单的方法,它与旧的JS兼容

var-sense=“河边有个男人浑身颤抖,但他需要送一包他认为是大球拍和口香糖的东西。”
var-census={};
var-most;
语句.match(/(\w+)\b/g).forEach(函数(单词){
var last=字。substr(-1);
most=most | | last;
普查[上次]=普查[上次]| |[];
//多次出现的单词每次都会被计数
普查[上次]。推送(word);
if(普查[last].length>普查[most].length){
most=最后一个;
}
});
//控制台日志(普查);
console.log('重复次数最多的字母是:'+most+'('+census[most].length+'times');

console.log('和相应的单词是:'+census[most])
为什么
split
没有帮助?我猜你可以在一个单词数组中循环,执行
yourArray[Index].substring(yourArray[Index].length-1,yourArray[Index].length)并在运行时添加到计数器。长篇大论,但很简单。更好的方法是在一个单独的数组中收集子字符串,然后创建另一个循环,在这些单独的数组中循环,以找到最长的一个。我建议您尝试,直到您至少能够找到一些实际执行某些操作的代码-当前您的函数
mostWordsEndsWith
甚至不接受您试图调用它的参数和数组
wordsEndsWith
在任何地方都没有定义。@Joshcrow您的评论应该是一个很好的答案。@请解释一下?为什么需要下一票?查看您的代码,
word.slice(-1)
似乎会选择一些标点符号,如逗号等,因为按空格分割的
不能保证以实际字母结尾,所以这不是一个很好的单词检测算法相同的未注释下一票发生在我身上,但谁在乎呢。如果出于某种原因,这个问题对我来说很有趣,我就写下答案。如果有一个富有成效的评论,一个关于我可以改进的提示,那么更好的是——我学到了一些东西