簡體   English   中英

找到最長的單詞之前先分割一個字符串

[英]Splitting a string before finding longest word

我已經閱讀了一些不同的帖子,所以很抱歉再次提出這個問題,但是似乎沒有一個可以解決我的問題。

我試圖繪制字符串中最長單詞的長度,該長度來自HTML。

我所能獲得的就是“未捕獲的TypeError:無法讀取未定義的屬性'split'”

HTML:

<p id="p">I'm looking for the longest length of a word in this sentence</p>
<button onclick="longestWordFunc()">Click</button>

JS:

var myString = document.getElementById("p");


function longestWordFunc(myString) {
  var stringSplit = myString.split(" ");
  var longestWord = 0;

  for(var i = 0; i < stringSplit.length; i++){
    if(longestWord >= stringSplit[i].length){

      longestWord = stringSplit[i].length;   
    }
   }

  return longestWord;
 }

使用reduce可以從空字符串開始迭代數組,並在每次迭代中返回兩者中最長的一個。

出現未定義錯誤的原因是因為myString是函數的參數,並且沒有向其中傳遞任何內容,因此未定義。

 var myString = document.getElementById("p").innerText; function longestWordFunc() { return myString.split(" ").reduce((longest, current) => current.length > longest.length ? current : longest, ''); } 
 <p id="p">I'm looking for the longest length of a word in this sentence</p> <button onclick="console.log(longestWordFunc())">Click</button> 

嘗試這個:

 <p id="p">I'm looking for the longest length of a word in this sentence</p>
 <button onclick="longestWordFunc()">Click</button>

在您的JS中,嘗試將.innerHTML添加到myString函數的末尾。 另外,它還在檢查0是否大於或等於當前的stringSplit元素。

 function longestWordFunc() {
     var myString = document.getElementById("p").innerHTML;
     var stringSplit = myString.split(" ");
     var longestWord = 0;

    for(var i in stringSplit) {
        if(longestWord <= stringSplit[i].length){
        longestWord = stringSplit[i].length;   
    }
    return longestWord;
 }

我看到一個問題,一個可能的問題。

  1. 不等式反轉,應為longestWord < stringSplit[i].length

  2. 也許您在創建元素之前就定義了myString (例如,在html的頭部)。 這可能就是為什么myString未定義的原因。 一種解決方案是將定義移到函數調用中,以便僅在單擊按鈕時定義myString

     function longestWordFunc() { var myString = document.getElementById("p") var stringSplit = myString.textContent.split(" "); var longestWord = 0; for(var i = 0; i < stringSplit.length; i++){ if(longestWord < stringSplit[i].length){ longestWord = stringSplit[i].length; } } return longestWord; } 

嘗試這個:

 var text = "I'm looking for the longest length of a word in this sentence" findLongestWord = (str) => { let split = str.split(" "); let longest = ""; split.forEach((word) => { if (word.length > longest.length) { longest = word; } }); return longest; } let longest = findLongestWord(text); console.log(`Longest Word: ${longest} - ${longest.length}`); 

如果只需要最長單詞的長度而不是返回單詞本身,則可以使用findLongestWord函數返回以下內容:

return longest.length

希望這可以幫助。

如Adrian所述,使用reduce是實現JS目標的一種好方法。

但是,如果您的目標是學習一些編碼基礎知識,那么這里有一些有關如何使當前代碼正常工作的提示。

 function longestWordFunc() { var myString = document.getElementById("p").innerText; // Just the inner text var stringSplit = myString.split(" "); var longestWord = 0; //Index of longest word var longestLength=0; //Length of longest word for(var i = 0; i < stringSplit.length; i++){ if(stringSplit[i].length>longestLength){ // The other way around longestLength = stringSplit[i].length; longestWord=i; } } console.log(stringSplit[longestWord]); return stringSplit[longestWord]; } 
 <p id="p">I'm looking for the longest length of a word in this sentence</p> <button onclick="longestWordFunc()">Click</button></br> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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