RubyにはCombined Comparisonまたは "Spaceship"演算子と呼ばれるものがあります。これは次のようになります:<=>
次のことを行います。
a <=> b :=
if a < b then return -1
if a = b then return 0
if a > b then return 1
JavaScriptに同様の演算子はありますか?そうでない場合、どうすれば同じ結果が得られますか?
@ madox2Math.sign(a - b)
を使用することをお勧めします。これは配列では機能しません(配列を比較するには、array.length
を使用する必要があります)。
また、Internet Explorer、Safari、またはすべてのモバイルブラウザーでは機能しません( [〜#〜] mdn [〜#〜] を参照)。
@ duques_lは、関数 こちら を見つけました。それは非常にうまく機能し、 JSFiddle でテストできます
唯一の問題は、文字列が比較できない場合、関数はnil
ではなく-1
を返すことです
更新:@ duques_lは関数を少し変更し、正常に機能するようになりました(とにかく、 JSFiddle ):
function spaceship(val1, val2) {
if ((val1 === null || val2 === null) || (typeof val1 != typeof val2)) {
return null;
}
if (typeof val1 === 'string') {
return (val1).localeCompare(val2);
}
else {
if (val1 > val2) { return 1 }
else if (val1 < val2) { return -1 }
return 0;
}
}
私が知る限り、JavaScriptにはそのような演算子はありませんが、 Math.sign() 関数を使用できます。
Math.sign(a - b);
注:コメントで述べたように、Math.sign()は現在すべてのブラウザでサポートされているわけではありません。互換性を確認してください( [〜# 〜] mdn [〜#〜] )。
から: http://sabrelabs.com/post/48201437312/javascript-spaceship-operator
改良版:
function spaceship(val1, val2) {
if ((val1 === null || val2 === null) || (typeof val1 != typeof val2)) {
return null;
}
if (typeof val1 === 'string') {
return (val1).localeCompare(val2);
} else {
if (val1 > val2) {
return 1;
} else if (val1 < val2) {
return -1;
}
return 0;
}
}