簡體   English   中英

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM