开发者问题收集

在找到最长单词之前拆分字符串

2018-10-02
119

我已阅读了关于此问题的几篇不同帖子,因此很抱歉再次询问,但似乎没有一篇能够解决我的问题。

我试图提取字符串中最长的单词的长度,该单词来自 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;
 }
3个回答

使用 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>
Adrian Brand
2018-10-02

尝试一下:

 <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;
 }



 
Jake Stewart
2018-10-02

正如 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>
visibleman
2018-10-02