2016-04-01 17 views
4
var city = [{ 
"city":"London" 
},{ 
"city":"Wales" 
} 
,{ 
"city":"Atom" 
} 
,{ 
"city":"Bacelona" 
}]; 

city.sort(function(a,b){ 
return a.city - b.city; 
}) 

console.log(city) 

Yukarıdaki kodda neyin yanlış olduğundan emin değil misiniz, neden sıralamıyor? mantığım iyi görünüyor. dizeleri fonksiyonundasort by object value çalışmıyor mu?

cevap

2

Dönüş:

return a.city.localeCompare(b.city); 

var city = [{ "city": "London" }, { "city": "Wales" }, { "city": "Atom" }, { "city": "Bacelona" }]; 
 

 
city.sort(function (a, b) { 
 
    return a.city.localeCompare(b.city); 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(city, 0, 4) + '</pre>');

+0

localCompare, bir daha iyidir:

Basitçe -> kod çalışması yapacak değişiyor? – Jennifer

+0

'localeCompare', daha yavaş ancak kullanımı kolay, -1, 0 ve 1 gibi bir sıralama işlevi gibi çıktılar. Ayrıca, herhangi bir dize olmayan özelliklerde onu çağırmamaya dikkat etmelisiniz, aksi takdirde büyük olasılıkla şunları atayacaktır: '(6) .localeCompare (" A ")'. – dandavis

+0

Cevabım önerdiğim gibi, localeCompare için giderdim. daha küçük olan çözüm zor çünkü sizin yerine sadece iki değer döndürüyor (-1, 0, 1). –

2

dizelerde - operatörünü kullanamazsınız, sadece sayılar içindir. Sözdizimi için <, >, <= veya >='u kullanmanız gerekir.

Nina Scholz'un yanıtı, İngilizce olmayan sözcüklerle çalışırken çok yararlıdır ve İngilizce sözcüklerle çalışır. `>` Karşı

var city = [{ 
    "city": "London" 
}, { 
    "city": "Wales" 
}, { 
    "city": "Atom" 
}, { 
    "city": "Bacelona" 
}]; 

city.sort(function(a,b){ 
    return (a.city > b.city ? 1 : (a.city === b.city ? 0 : -1)); 
}); 

console.log(city); 
+0

bu, herhangi bir yinelenen değerler üzerinde dengesiz olurdu. teknik olarak, bir [[-1,0,1] 'in bir sort() içinde dönmemesi için bir tuhaflık var ve her yerde çalışacağı garanti edilmiyor ... – dandavis

+0

@dandavis, eğer şehir çoğaltılmışsa, o zaman iki (veya daha fazla) nesne bu şekilde belirlenemez. Bundan sonra diğer koşulları da dahil edebilirsiniz, örneğin, 'return (a.city> b.city) || (a.latitude> b.latitude) – Jamie

+0

nah, sadece "get a.city> b.city" gibi bir şeye ihtiyacınız var mı? 1: (a.city == b.city? 0: -1); 'bir dupe karıştırmaktan kaçınmak için. Yinelenen özelliklere ve birden fazla görünür pervaneye sahip nesneler, istikrarı elde etmek için mevcut dizin konumunu 2. ölçüt olarak kullanabilirler: http://stackoverflow.com/a/2085225/2317490 – dandavis