查找数组中最长的字符串

Nei*_*ir0 68 javascript

有没有一种简短的方法可以找到字符串数组中最长的字符串?

有点像arr.Max(x => x.Length);

dec*_*eze 167

var longest = arr.sort(function (a, b) { return b.length - a.length; })[0];
Run Code Online (Sandbox Code Playgroud)

可能效率更高,但仅在Javascript 1.8/ECMAScript 5中可用,并且在旧版浏览器中默认不可用:

var longest = arr.reduce(function (a, b) { return a.length > b.length ? a : b; });
Run Code Online (Sandbox Code Playgroud)


Dáv*_*zki 25

对旧问题的新答案:在ES6中,您可以做得更短:

Math.max(...(x.map(el => el.length)));
Run Code Online (Sandbox Code Playgroud)

  • @CTS_AE 两次遍历是独立的,所以我认为这是“O(n) + O(n) = O(n)”,而不是“O(n^2)”。 (5认同)
  • 这将返回最长字符串的长度,而不是最长字符串。 (3认同)

Jas*_*aro 23

我会做这样的事情

var arr = ['first item', 'second item is longer than the third one', 
           'third longish item'];

var lgth = 0;
var longest;

for(var i=0; i < arr.length; i++){
    if(arr[i].length > lgth){
        var lgth = arr[i].length;
        longest = arr[i];
    }      
} 

alert(longest);
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/jasongennaro/MLqLq/

  • 这是最好的,因为它不会影响您的阵列.然而,如果你排序(如在选择的答案中)你的数组被排序,有时你不想要那样.+1,谢谢 (2认同)

Ale*_*mia 7

reduce()在 ES6 中,这可以通过复杂的调用来完成O(n),而不是使用sort()以下解决方案O(nlogn)

const getLongestText = (arr) => arr.reduce(
  (savedText, text) => (text.length > savedText.length ? text : savedText),
  '',
);

console.log(getLongestText(['word', 'even-longer-word', 'long-word']))
Run Code Online (Sandbox Code Playgroud)


kat*_*ugh 6

var arr = [ 'fdgdfgdfg', 'gdfgf', 'gdfgdfhawsdgd', 'gdf', 'gdfhdfhjurvweadsd' ];
arr.sort(function (a, b) { return b.length - a.length })[0];
Run Code Online (Sandbox Code Playgroud)


Nie*_*dal 5

也许不是最快的,但肯定非常可读:

function findLongestWord(array) {
  var longestWord = "";

  array.forEach(function(word) {
    if(word.length > longestWord.length) {
      longestWord = word;
    }
  });

  return longestWord;
}

var word = findLongestWord(["The","quick","brown", "fox", "jumped", "over", "the", "lazy", "dog"]);
console.log(word); // result is "jumped"
Run Code Online (Sandbox Code Playgroud)

从 IE9+ 开始支持数组函数forEach