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

时间:2011-05-18 10:49:22

标签: javascript jquery arrays

如果我有以下数组:

array = ['a', 'abcde', 'ab'] ;

我想获得数组元素的最大长度,即5(对于元素'abcde')。

我知道你可以通过(例如)array [1] .length获取数组元素的长度,但我不知道如何获得最大长度。

JavaScript或jQuery中的任何答案都会很棒。

TIA

保罗·琼斯

8 个答案:

答案 0 :(得分:21)

单行代表:

 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 })); 的旧版浏览器中)执行此操作:

{{1}}

答案 1 :(得分: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 :(得分:2)

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

//First Test:
int algorithmTest(int testArray[], int Size){

    //Declare variables:
    int k = Size/2;
    int numSmaller;
    int numEqual;

    //For every element in the array:
    for(int i=0; i<Size; i++){

        //Set varibales to 0:
        numSmaller = 0;
        numEqual = 0;

        //For every element in the array:
        for(int j=0; j<Size; j++){

            //If j is less than i:
            if(testArray[j] < testArray[i]){

                //Increment numSmaller:
                numSmaller++;

            //Else if j is equal to i:
            }else if(testArray[j] == testArray[i]){

                //Increment numEqual:
                numEqual++;

            }
        }

        //Determine if the median was found:
        if(numSmaller < k && k <= (numSmaller + numEqual)){

            //Retrun the medain:
            return testArray[i];

        }
    }

    //Return 0:
    return 0;

}

答案 3 :(得分:1)

你可以使用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);
};

答案 4 :(得分:1)

通过使用Array.prototype.reduce(),您可以优雅地对阵列中的每个项目执行Math.max()计算。数组中的项是字符串还是子数组(2D数组,矩阵等)并不重要,这将起作用,因为StringArray都具有prototype.length()函数

我还在每个your comment上面添加了一个整数值检查。

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

答案 5 :(得分:0)

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

我将遍历所有数组元素并将最长元素存储在局部变量中。通过比较第一个数组元素和第二个数组元素,然后存储较长的元素,可以得到最长的元素。然后继续比较每个元素到目前为止最长的元素。

你只需要一个循环即可。

答案 6 :(得分:0)

您可以创建自己的代码。 按照这个 - &gt;

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

然后使用

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

答案 7 :(得分:0)

在这种情况下,有一个非常有用的功能。  Array.reduce

['a', 'abcde', 'ab'].reduce((r,s) => r.length > s.length ? r : s, 0);