查找数组中最长的字符串

IT技术 javascript
2021-02-06 13:19:49

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

arr.Max(x => x.Length);什么?

6个回答

Javascript 1.8/ECMAScript 5 开始可用,并且在大多数旧浏览器中可用

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

否则,一个安全的选择:

var longest = arr.sort(
    function (a, b) {
        return b.length - a.length;
    }
)[0];
@GismoRanas 这是一个不同的问题,您仍然可以使用reduce返回数组的回调函数。
2021-03-31 13:19:49
如果有 2 个或更多相同大小的字符串并且结果应该是一个数组怎么办?在这种情况下,reduce 不起作用,您必须迭代第一个结果。
2021-04-06 13:19:49

一个老问题的新答案:在 ES6 中,你可以做得更短:

Math.max(...(x.map(el => el.length)));
另一件要注意的事情是,这将遍历集合两次,O(n^2)而大多数其他选项只会遍历集合一次O(n)自定义比较器sort甚至可能使用O(log(n))
2021-03-20 13:19:49
这将返回最长字符串的长度,而不是最长字符串。
2021-03-26 13:19:49
@CTS_AE 两次遍历是独立的,所以我认为这是O(n) + O(n) = O(n),不是O(n^2)
2021-03-31 13:19:49
@JoshuaBreeden 是的,我相信你是对的👍
2021-04-01 13:19:49

我会做这样的事情

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

console.log(longest);

想知道为什么要var lgth在 for 循环中重新声明这样做而不重新声明lgth给了我正确的答案。但是,我在自己的版本中将all var's更改let's 。
2021-03-15 13:19:49
这是最好的,因为它不会影响您的阵列。而如果您排序(如在选择的答案中),您的数组会被排序,有时您不希望这样。+1,谢谢
2021-04-11 13:19:49

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

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"

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

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