2016-04-01 8 views

答えて

2

リターン:あなたは、文字列に-演算子を使用することはできません

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、1が優れている:

単に->へのコードの作業になるだろう変更? – Jennifer

+0

'localeCompare'は遅くなりますが、ソート関数のように-1、0、1を出力するので使いやすいです。また、文字列以外のプロパティでも呼び出さないように注意する必要があります。そうしないと、 '(6).localeCompare(" A ")'がスローされます。 – dandavis

+0

私の答えが示唆するように私はlocaleCompareに行くだろう。より小さい解は、e(-1、0、1)の代わりに2つの値しか返さないため、扱いにくいです。 –

2

、彼らは数字だけのためのものです。字句順に<,>,<=または>=を使用する必要があります。

Nina Scholzの答えは、英語以外の単語を扱う場合に非常に便利で、英語の単語にも役立ちます。 `>`対

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

これは、重複した値では不安定になり、「0」が返されます。ソート()で '[-1,0,1]'のいずれかを返さないことは技術的にも奇抜です。 – dandavis

+0

@dandavis、都市が重複している場合は、 2つ(またはそれ以上)のオブジェクトをこのように決定することはできません。この後に他の条件を含めることができます。たとえば、 'return(a.city> b.city)|| (a.latitude> b.latitude) ' – Jamie

+0

なので、' return a.city> b.cityのようなものが必要ですか? 1:(a.city == bcity?0:-1); '偽装を避けるためです。重複したプロパティと複数の表示可能な小道具を持つオブジェクトは、安定性を達成するために既存のインデックス位置を第2の基準として単に使用することができます:http://stackoverflow.com/a/2085225/2317490 – dandavis

関連する問題