如果我有以下数组:
array = ['a', 'abcde', 'ab'] ;
我想获得数组元素的最大长度,即5(对于元素'abcde')。
我知道你可以通过(例如)array [1] .length获取数组元素的长度,但我不知道如何获得最大长度。
JavaScript或jQuery中的任何答案都会很棒。
TIA
保罗·琼斯答案 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数组,矩阵等)并不重要,这将起作用,因为String
和Array
都具有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);