首页 > 解决方案 > 在 JavaScript 中查找最长和最短的单词

问题描述

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

我试图找出解决它们之间的区别。除了为什么最长长度是“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;
  }

标签: javascriptarrays

解决方案


您的问题可以在一行中使用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];

推荐阅读