2012-03-10 37 views
7

ile aynı olup olmadığını kontrol edin Bir dizideki her öğenin birbiriyle aynı olup olmadığını test etmem gerekiyor. Örneğin: Her öğe özdeş olmadığı içinBir dizideki her öğenin javascript

var list = ["l","r","b"]

olarak yanlış değerlendirir mı. Öte yandan bu Açık: hepsi aynıdır çünkü

var list = ["b", "b", "b"]

olarak gerçek değerlendirmek olmalı. Bunu gerçekleştirmenin en verimli (hız/kaynak olarak) yolu ne olurdu?

cevap

9
function identical(array) { 
    for(var i = 0; i < array.length - 1; i++) { 
     if(array[i] !== array[i+1]) { 
      return false; 
     } 
    } 
    return true; 
} 
+1

Bu çözümü tercih ettim, teşekkürler. Pimvdb, array.every ile çok zarif bir çözüme sahipti, ancak bunun yerine büyük bir belgeye (ES5 uyumlu olmayan tarayıcı desteği için) zaten büyük bir belgeye .every'nin bir örneğini eklemem gerekiyordu. – Nick

+0

Çözümünüz benim için en mantıklı. Bununla birlikte, "! =" Ifadesini "! ==" olarak değiştiririm çünkü çözümünüz aşağıdaki dizide (01.1,1,1,1,1, "1") doğru döner, burada son karakter bir dizgedir. . –

+0

@JoffreyBaratheon haklısınız, sabit, teşekkürler! – Dogbert

2
function matchList(list) { 
    var listItem = list[0]; 

    for (index in list) { 
    if(list[index] != listItem { 
     return false; 
    } 
    } 

    return true; 
} 
+1

bu dizinin son öğe başarısız olur. –

+0

Evet, bunu fark ettim. – Jivings

+1

Şimdi çalışmak üzere düzenlenmiştir. – Jivings

12

ES5, sen yapabileceğini:

arr.every(function(v, i, a) { 
    // first item: nothing to compare with (and, single element arrays should return true) 
    // otherwise: compare current value to previous value 
    return i === 0 || v === a[i - 1]; 
}); 

.every yanı kısa devre yapar.

+1

Güzel, bunun olduğunu bilmiyordum ve bunu kullanmaya başlayacağım. Sadece array.every için dokümanlara bir işaretçi eklenmesi https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/every – Shane

+0

Teşekkürler, bu çok zarif bir çözüm. Daha eski tarayıcıları desteklemek için array.every kodunu eklemekten kaçınmak için sonunda Dogberts çözümü için gittim - ama prensipte bu güzel çalışmış olurdu. – Nick

1
var list = ["b", "b", "b"]; 
var checkItem = list[0]; 
var isSame = true; 
for (var i = 0; i < list.length; i++) { 
    if (list[i] != checkItem) { 
    isSame = false; 
    break; 
    } 
} 
return isSame; 
+0

Sadece ilk karşılaştığınızda false döndür. – Jivings

+0

Evet, OP'nin daha sonra kullanmak için istediği veya bir işlevde geri getirilip getirilmediğinden emin değildim. –

0

Önerim (Easiest way to find duplicate values in a JavaScript array kontrol) çiftleri kaldırmak ve sonra görmek için kontrol etmek olurdu tüm öğeleri aynı olduğunu anlamına geleceğini uzunluk == 1..

+2

Bu, O (n^2) (veya sıralama algoritmasına bağlı olarak O (n log n)) olur. Çok yavaş. – Dogbert

+0

Aslında ikinci cevabı önerdim (belirtmiş olmalı); –

0
function allEqual(list) 
{ 
    if(list.length == 0 || list.length == 1) 
    { 
     return true; 
    } 

    for (index in list) { 
    if(list[index] != list[index+1] { 
     return false; 
    } 
    } 

    return true; 

} 
+1

İlk cevabım gibi: dizinin son elemanında başarısız olur. – Jivings

İlgili konular