JavaScript:查找字符串中最长的单词

14
function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    for (var i = 0; i < str.length - 1; i++) {
        if (longest < str[i].length) {
            longest = str[i].length;
            word = str[i];
        }
    }
    return word;
}
当我调用longestWord("傲慢与偏见")时,它返回的是'傲慢'而不是最长单词'偏见'...为什么? 我查看了一些类似的问题,但解决方案看起来很像我的代码。

8
不要将字符串数组命名为"str"。 - aaronman
33个回答

1
for (var i = 0; i < str.length - 1; i++)

to

for (var i = 0; i <= str.length - 1; i++)

OR

for (var i = 0; i < str.length; i++)

1
这解决了问题吗?
function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    for (var i = 0; i <= str.length - 1; i++) {
        if (longest < str[i].length) {
            longest = str[i].length;
            word = str[i];
        }
    }
    return word;
}

document.write(longestWord("pride and prejudice"));

1
function LongestWord(sen) { 

  // code goes here  
  const wordsArray = sen.split('').map(c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c<='9')? c : ' ').join('').split(' ').filter(item => item !== '');
  wordsArray.sort((a, b) => a.length < b.length);
  return wordsArray[0]; 

}

0
我认为使用forEach循环是最易理解的版本。
function longestWord(sen) {
  big_word = ""
  words = sen.split(" ")
  words.forEach(function(word){
    if (word.length > big_word.length){
        big_word = word
    };
  });
return big_word
};

0

试一下

 function longest(string) {
        var str = string.split(" ");
        var longest = 0;
        var word = null;
        for (var i = 0; i <= str.length - 1; i++) {
            if (longest < str[i].length) {
                longest = str[i].length;
                word = str[i];
            }
        }
        return word;
    }

0

在问题的错误检查中,请参考this answer

字符串中最长的单词

使用for/forEach循环

function longestWord(str){
  const words = str.split(' ');
  let longWord = "";
  words.forEach((word) => {
    if(word.length > longWord.length) { longWord = word }
  })
  return longWord;
}

使用sort函数

function longestWord(str) {
  return str.split(' ')
            .sort((a, b) => b.length - a.length)[0];
}

使用 reduce 函数

function longestWord(str){
  return str.split(' ')
            .reduce((maxWord, curWord) => curWord.length > maxWord.length ? curWord : maxWord );
}

// for loop
function longestWord1(str){
    const words = str.split(' ');
    let longWord = "";
    words.forEach((word) => {
      if(word.length > longWord.length) { longWord = word }
    })
    return longWord;
}

// sort
function longestWord2(str) {
    return str.split(' ').sort((a, b) => b.length - a.length)[0];
}
    
// reduce
function longestWord3(str){
    return str.split(' ').reduce((maxWord, curWord) => curWord.length > maxWord.length ? curWord : maxWord );
}

let text;
text = "What if we try a super-long word such as otorhinolaryngology";
console.log(longestWord1(text));//=> "otorhinolaryngology"
text = "";
console.log(longestWord2(text));//=> ""
text = "What "
console.log(longestWord3(text));//=> "What"
text = "What is pen?"
console.log(longestWord1(text));//=> "What"
text = "three four five six twenty one"
console.log(longestWord2(text));//=> "twenty"
text = ("The quick brown fox jumped over the lazy dog")
console.log(longestWord3(text));//=> "jumped"
  
  


0

另一种方法是使用排序:

    function longestWord(string) {
        let longest = 0;
        let str = str.split(" ").sort((word1,word2)=>{
        });
        return str[0].length;
   }
   longestWord('I love Python ')

虽然这可能是一个可行的解决方案,但排序可能比对数组进行一次迭代需要更长时间。 - Kami Kaze

0
    function findLongestWord(str) {
       let stringArray = str.split(" ");
       stringArray.sort(function(a, b){
          return a.split('').length < b.split('').length;
       })
       return stringArray[0];
    }

    findLongestWord("The quick brown fox jumped over the lazy dog");

0

有特定的原因吗?

for (var i = 0; i < str.length - 1; i++)

不是

for (var i = 0; i < str.length - 1; i++)

看起来那可能是原因。


@aaronman 哈哈,既然答案已被接受,我就不编辑它了。 :) - Zong

0

你需要使用:

for (var i=0;i<=str.length - 1; i++)

这样它就会扫描整个短语


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接