2011-05-18 23 views
8

Aşağıdaki dizi varsa:JavaScript dizi elemanının uzunluğu en fazla elde

I dizi elemanları maksimum uzunluğu istiyorum
array = ['a', 'abcde', 'ab'] ; 

5 (elemannın abcde '), yani.

Bir dizi öğesinin uzunluğunu (örn. Dizi [1] .length) alabileceğinizi biliyorum, ancak maksimum uzunluğu nasıl alacağımı bilmiyorum.

JavaScript veya jQuery'deki herhangi bir yanıt harika olurdu.

TIA

Paul Jones

+0

Teşekkür . Tüm çözümler, tüm dizi öğelerinin dizge olduğu, verdiğim örnekle mükemmel bir şekilde çalıştı. İlgilenen herkes için, dizi elemanları sayısal ise, biraz ekleme yapılmalıdır (bence): $ .each (myarray, işlev (i, öğe) { item = Dize (öğe) // ek maxLength = Math.max (maxLength, item.length); \t alert (madde + '' + maxLength) }); Bunu yapmanın 'daha akıllı' bir yolu varsa, bildirin. Yardım için tekrardan Paul Jones –

cevap

1

Sen biraz daha hoş yineleme jQuery en each() kullanabilirsiniz.

var maxLength = 0; 

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

Veya düz ol' JavaScript ...

var maxLength = 0; 

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

Tüm cevaplar için teşekkürler - tüm çözümler mükemmel bir şekilde çalıştı. İlgilenen herkes için, eğer dizi elemanlar sayısalsa, küçük bir ekleme yapılmalıdır: –

5

kullanarak jQuery olmadan, o yapmanın bir (muhtemelen çöp) yolu:

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

Eski bir döngü için yanlış olan bir şey yok, muhtemelen diğer çözümlerden daha hızlıdır. İlk başta bir native * her * yöntemini test edebilirsiniz. – RobG

+0

Alınan düşüşle ilgili olarak, sanırım kendi kendini beğenme, burada iyi bir fikir değil. Her biriyle ilgili iyi fikir. Serinlik için –

0

Bunu yapmanın birkaç yolu vardır .

Tüm dizi öğeleri arasında yinelemek ve en uzun öğeyi yerel bir değişkende saklamak istiyorum. Birinci dizi elemanını ikinci ile karşılaştırıp daha uzun olanı saklayarak en uzun elemanı alırsınız. O zaman devam edin ve her elemanı bugüne kadarki en uzun olanı ile karşılaştırın.

Bunu yapmak için yalnızca bir döngüye ihtiyacınız var.

20

sizin için tek liner:

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

Çalışma örneği: http://jsfiddle.net/5SDBx/

Sen (Array.prototype.map bir compatibility implementation ile hatta eski tarayıcılarda) yeni tarayıcılarda jQuery olmadan bunu yapabilir çok:

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

+1. – alex

+2

Heh, Tam olarak o satırı yazmam gerekiyordu, ancak jQuery olmadan. –

+1

@Tim jQuery Olmadan? * Kızgın mısın? *: P – alex

0

Kendi kodunuzu kendiniz oluşturabilirsiniz. bu izleyin -

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

>

sonra Array.prototype.reduce() kullanarak

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

kullanıyorsanız, zarif dizide her öğe için bir Math.max() hesaplama gerçekleştirebilir. Dizideki öğelerin dize veya alt diziler olup olmadığı önemli değildir (2B dizi, matris, vb.), Bu String ve Array her ikisi de prototype.length() işlevine sahip olduğundan çalışacaktır.

Ayrıca yukarıdaki your comment için tamsayı değerleri için bir kontrol ekledim.

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

Bir astar:

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

eski soruya yeni bir yanıt: hatta daha kısa yapabilirsiniz ES6 içinde: tüm yanıtlar için

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