在JavaScript中查找最长和最短的单词

时间:2019-04-29 16:17:04

标签: javascript arrays

一个问题是找到字符串中最长的单词,另一个问题是找到字符串中最短的单词。

我试图找出解决它们之间的区别。我了解所有内容,但为什么将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;
  }

3 个答案:

答案 0 :(得分:3)

您可以使用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];

答案 1 :(得分:0)

longestlength始终必须匹配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;
 }

答案 2 :(得分:0)

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, '')
}