获取JavaScript数组元素的最大长度

14
如果我有以下数组:
array = ['a', 'abcde', 'ab'] ;
我想要获得数组元素的最大长度,即5(该元素为'abcde')。
我知道可以通过array[1].length(例如)获取数组元素的长度,但是我不知道如何获取最大长度。
任何JavaScript或jQuery中的回答都很好。
提前致谢。
保罗琼斯

谢谢大家的回复。所有的解决方案都可以完美地处理我给出的示例,其中所有数组元素都是字符串。对于那些感兴趣的人,如果数组元素是数字,则需要稍作修改(我想):$.each(myarray, function(i, item) { item = String(item) // 添加 maxLength = Math.max(maxLength, item.length); alert(item + ' ' + maxLength) });如果有更“聪明”的方法,请告诉我。再次感谢您的帮助保罗·琼斯 - Paul Jones
8个回答

25

一句话解决方案:

 Math.max.apply(Math, $.map(array, function (el) { return el.length }));

工作示例:http://jsfiddle.net/5SDBx/

在新版浏览器中,你可以不使用jQuery(或者使用Array.prototype.map兼容实现)完成这个操作:

Math.max.apply(Math, array.map(function (el) { return el.length }));

2
呵呵,我正打算写出完全一样的代码行,不过可能不需要jQuery。 - Tim Down
1
@Tim 不用 jQuery?你疯了吗? :P - alex
@Tim:是的,我考虑过,但IE8及以下版本让我打消了这个念头 :-) *编辑:*已添加。 - Andy E
3
你已经有了你的一票。那我现在该怎么办?就请接受我的“干得好”吧。干得好。 - Tim Down

13

对于一个老问题的新答案:在ES6中,你甚至可以更加简短:

Math.max(...array.map(el => el.length));

5

一种(可能不太好的)方法是,在不使用Jquery的情况下完成该操作:

var myarray = ['a','abcde','ab'];
var maxlen = 0;
for (i=0; i<myarray.length; i++) {
  if (myarray[i].length>maxlen) {
    maxlen = myarray[i].length;
  }
}

2
使用传统的for循环没有问题,很可能比其他解决方案更快。不过你可以先测试一下本地each方法。 - RobG
根据收到的踩票,我猜自嘲在这里不是一个好主意。不过你提到的“each”很不错。 - James
可以使用 Array.reduce 将其转换为自包含表达式。 - Salman A

5
在这种情况下,有一个非常有用的函数。Array.reduce
['a', 'abcde', 'ab'].reduce((r,s) => r.length > s.length ? r : s, 0);

3
通过使用 Array.prototype.reduce(),你可以优雅地对数组中的每个项目执行 Math.max() 计算。无论数组中的项目是字符串还是子数组(2D 数组、矩阵等),这都可以工作,因为 StringArray 都有一个 prototype.length() 函数。
另外,我也根据 你上面的评论 添加了一个整数值检查。

function arrayItemMax(arr) {
    return arr.reduce(function (result, val) {
        return Math.max(result, !isNaN(val) ? parseInt(val) : val.length);
    }, 0);
}

function print(text) {
  document.getElementsByTagName('body')[0].innerHTML += text + '<br />';
}

print(arrayItemMax(['a', 'abcde', 'ab'])); // 5
print(arrayItemMax([1, 5, 2]));            // 5
print(arrayItemMax(['1', '5', '2']));      // 5

一句话简述:
function(a){return a.reduce(function(r,v){return Math.max(r,!isNaN(v)?parseInt(v):v.length);},0);}

2
您可以使用jQuery的each()来更好地迭代。
var maxLength = 0;

$.each(array, function(i, item) {
   maxLength = Math.max(maxLength, item.length);
});

或者普通的 JavaScript...
var maxLength = 0;

for (var i = 0, length = array.length; i < length; i++) {
   maxLength = Math.max(maxLength, array[i].length);
};

感谢所有的回复-所有的解决方案都完美地解决了问题。如果有兴趣的话,需要进行一些微小的补充,特别是在数组元素是数字的情况下: - Paul Jones

0

你可以创建自己的代码。 按照这个步骤 ->

Array.prototype.count = function(){  return this.length; }

然后使用

arr = [ "erhan",1,"sonmez",2 ];
arrCount = arr.count();

0

有几种方法可以做到这一点。

我会遍历所有数组元素并将最长的元素存储在本地变量中。通过比较第一个数组元素和第二个数组元素,然后存储较长的元素来获取最长的元素。然后继续比较每个元素与迄今为止最长的元素。

你只需要一个循环即可实现。


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