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("Pride and Prejudice")、最も長い単語である「偏見」ではなく「プライド」が返されます...なぜですか? 他の同様の質問をいくつか確認しましたが、解決策は私のコードによく似ていました。

4

33 に答える 33

14

このような問題に対して関数型アプローチを採用する利点の 1 つは、数を数え続ける必要さえないことです。

詳細については、 MDN Array.reduceを参照してください。(注: reduceIE8 の場合は shim が必要です)

function longer(champ, contender) {
  return (contender.length > champ.length) ? contender : champ;
}

function longestWord(str) {
  var words = str.split(' ');
  return words.reduce(longer);
}

console.log(longestWord("The quick brown fox jumped over the lazy dogs"));

于 2013-06-30T03:47:50.467 に答える
2

Lo-Dash のようなライブラリを使用してコードを簡素化できます。

function longestWord(string) {
    var words = string.split(' ');
    return _.max(words, function(word) { return word.length; });
}
于 2014-06-03T13:06:58.913 に答える
2

ForEach は FF では高速ですが、Chrome では低速ですが、キャッシュされた長さと関数の適用/呼び出しを使用する for ループは、FF と chrome の両方で非常に高速です。

以下のコードが役立つことを願っています:

function getLongest (arrStr) {
  var longest = 0, word;

  for(var i=0 , len = arrStr.length ; i < len ; i++){

    if(longest < arrStr[i].length) {
       longest = arrStr[i].length;
       word = arrStr[i];
    }

  }

  return word;
}

function isLongest (str) {
  var arrayStr = str.split(' ');
  return function(fn) {
    return fn.apply(this,[arrayStr]);
  }
}

isLongest("hello aaaaaaaaaaaaaaaaaaaaaaaaa bbb")(getLongest); //aaaaaaaaaaaaaaaaaaaaaaaaa
于 2014-11-08T10:07:33.473 に答える
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"));
于 2017-02-07T23:47:27.303 に答える
0

これを解決するもう1つの方法があります。

function findLongestWord(str) {
  var result = [];
  
  var one = str.split(" ");
    
   for (var i = 0; i < one.length; i++) {
    result[i] = one[i].length;
     result.reverse().sort(function(a,b) {
       return b-a;
     });   
   }
  return result[0];
}

于 2016-07-16T23:13:44.060 に答える
0

これはもっと簡単だと思います

function findLongestWord(str) {
    var longestStr = 0;
    for (var x=0;x<str.split(' ').length;x++){
        if (longestStr < str.split(' ')[x].length){
            longestStr = str.split(' ')[x].length;
        }
    }
    return longestStr;
}
于 2015-08-05T16:52:52.590 に答える
0

const longestWord = string =>
{
    stringArray = string.split(' ').sort(
        (a,b) => b.length - a.length)
    let longestArray= stringArray.filter( word => word.length === stringArray[0].length ) 
    if(longestArray.length === 1){
        console.log(longestArray[0])
    }
    else
    {
        console.log(longestArray)
    }
}
longestWord("Pride and Prejudice")

于 2020-04-02T06:25:00.457 に答える
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;
    }
于 2017-11-24T21:33:21.440 に答える
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");
于 2018-07-02T08:08:15.477 に答える
0

別の方法は、並べ替えを使用することです。

    function longestWord(string) {
        let longest = 0;
        let str = str.split(" ").sort((word1,word2)=>{
        });
        return str[0].length;
   }
   longestWord('I love Python ')
于 2018-03-21T23:16:18.700 に答える
0

sort() メソッドを使用して、配列の要素を順序付け基準でソートし、この配列の最初の要素の長さ、つまり最も長い単語の長さを返します。

function longest(string){
    var longestWord = string.split(' ').sort(function(a,b){
        return b.length - a.length;
    });
    return longestWord[0];
}
于 2017-04-05T10:45:00.790 に答える