![](/img/trans.png)
[英]Finding the longest Palindrome in a string and returning the longest single word in Javascript
[英]Finding Longest & Shortest word in JavaScript
一个问题是找到字符串中最长的单词,另一个是找到字符串中最短的单词。
我试图找出解决它们之间的区别。 我了解所有内容,但为什么将longestlength设为“ longestlength = 0”而不是“ longestlength = newString [0] .length”。 我试图用它解决它,输出是不确定的。 同样,对于“ shortestLength”,如果我使用“ 0”而不是“ newString [0] .length”对其进行初始化,则无法定义,但我不理解其背后的原因。
//code for longest string
function longestWord(string) {
let newString =string.split(" ");
let longestWord;
let longestlength= 0;
for(let i=0; i<newString.length; i++){
if(newString[i].length > longestlength){
longestlength = newString[i].length;
longestWord= newString[i];
}
}
return longestWord;
}
//code for shortest string
function shortestWord(string) {
var stringArray = string.split(" ");
var shortestWord;
var shortestLength = stringArray[0].length;
for(var i = 0; i < stringArray.length; i++){
if(stringArray[i].length < shortestLength){
shortestLength = stringArray[i].length;
shortestWord = stringArray[i];
}
}
return shortestWord;
}
您可以使用reduce
在一行中解决您的问题。
最长字:
string.split(' ').reduce((acc, cur) => acc.length >= cur.length ? acc : cur);
最短字:
string.split(' ').reduce((acc, cur) => acc.length <= cur.length ? acc : cur);
这就是您的代码可能无法正常工作的原因 :在shortestWord
,您将当前的最短长度设置为数组中第一个单词的长度,但是您没有将最短单词设置为数组中的第一个单词,但仍未定义。 如果数组中的第一个单词恰好是最短的单词,则没有单词会更短,因此不会将任何单词分配给shortestWord
并且该函数将返回undefined
。
解决方案 :更换
var shortestWord;
同
var shortestWord = stringArray[0];
longestlength
始终必须匹配longestWord
。 如果您设置长度,而不是单词本身,并且长度实际上是最长的, longestWord
返回longestWord
,尽管它仍然为空。
为避免此类错误,只需保留单词本身,然后使用.length
检查其长度:
function longest(words) {
let longest;
for(const word of words.split(" "))
if(!longest || word.length > longest.length) // swap this to get the "shortest"
longest = word;
return longest;
}
function longest(str){
return str.split(" ").reduce((a,b)=> b.length >= a.length ? b : a,'')
}
function shortest(str){
return str.split(" ").reduce((a, b)=>a.length <= b.length ? a : b, '')
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.