Eğer

2016-03-24 22 views
1

Eğer

var hits = ["a", "b", "c"]; 
 

 
if (hits !== ["a", "b", "c"]){ 
 
//Do some stuff here 
 
};

Bir Comparsion gibi bir dizinin değerini kullanabilir miyim bir Karşılaştırma olarak bir Array değerini kullanabilir miyim? Yukarıdaki benim için işe yaramıyor gibi görünüyor, bu konuda gitmek için bir yol olup olmadığını veya karşılaştırma için bir dizinin değişmez değerini erişmek için başka bir yolu varsa merak ediyorum.

+4

http://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript –

+0

Dizi karşılaştırması için kolayca bir işlev yazabilirsiniz. –

+0

Dizileri nesnelere benzediğinden dizileri bu şekilde karşılaştıramazsınız. Ve bir nesne üzerinde karşılaştırma operatörü kullandığınızda, referansı karşılaştırılacak ve karşılaştırma sonucu geri dönecektir. –

cevap

0

Sen (=== ve !==) nesnelerin durumunda referanslar değil değerler karşılaştırmak bu

if (JSON.stringify(hits) === JSON.stringify(["a", "b", "c"])) { 
5

eşitlik operatörleri yazabilir. JavaScript Dizilerinde nesneler olduğuna dikkat edin. Bu (bunlar, onlar aynı değerleri aynı içerirler bakmak, ama aynı dizi değiliz) iki ayrı diziler, çünkü nedenle ve onların referansları farklılık gösterir:

Her iki işlenen nesnelerdir, o zaman JavaScript karşılaştırır işlenenler bellekte aynı nesneye başvurduğunda eşit olan iç referanslar.

Bu konuda daha fazla bilgiyi MDN numaralı telefondan bulabilirsiniz.

Not:== ve != eşitlik operatörleri de referanslarla nesneleri karşılaştırmak, ancak (ve beklenmedik sıklıkla var) sadece basit karşılaştırma daha fazlasını beri, genellikle bunları kullanmak ve her zaman (sıkı eşitlik işlemleri sadık kalmama tavsiye edilir === ve !==).

Diziler nasıl karşılaştırılır?

En az birkaç farklı yöntem vardır. Bazı insanlar, her iki dizinin JSON.stringify'unu karşılaştırmayı önermektedir, ancak basit durumlarda işe yaramasına rağmen, gerçekten iyi bir performans performansı değildir. Burada daha iyi yöntemler bulabilirsiniz https://stackoverflow.com/a/14853974/704894

lodash veya underscore gibi bir yardımcı program kitaplığı kullanacaksanız, bu işlev zaten var! Bkz. https://lodash.com/docs#isEqual

+1

Yani ne hakkında '==' ve '! ='? referansları karşılaştırmıyorlar mı? –

+1

Peki neden 'a' === 'a'' 'true' döndürüyor? – Lewis

+0

@RajaprabhuAravindasamy Evet, yapacaklar. Bunu cevabıma ekledim. –

0

Javascript dizilerini işleme biçiminden dolayı bu şekilde yapamazsınız - değerler aynı değil, nesnenin aynı nesne olup olmadığını denetlemez (ki bu değil).

+0

Bu aslında iyi bir fikir değil. Ya dizide böyle bir şey olsaydı? ['a, b', 'b', 'c'] 've ikincisi böyle bir şey:' ['a', 'b, b', 'c'] '? Doğruyu döndürür, ancak bunlar aynı diziler değildir. – Paulooze

+1

Hmm, evet tabiki - Önerilen kodu kaldıracağım – millerbr