Ruby には結合比較または「宇宙船」演算子と呼ばれるものがあり、次のようになります。<=>
次のことを行います。
a <=> b :=
if a < b then return -1
if a = b then return 0
if a > b then return 1
Javascriptに同様の演算子はありますか? そうでない場合、どうすれば同じ結果を得ることができますか?
@ madox2は、数値では機能しますが、配列では機能しない の使用を提案しMath.sign(a - b)
ました (配列を比較するには、 を使用する必要がありますarray.length
)。
また、Internet Explorer、Safari、またはすべてのモバイル ブラウザでは機能しません ( MDNを参照) 。
@duques_lはここで関数を見つけました。非常にうまく機能します。JSFiddleでテストできます
唯一の問題は、文字列が比較できない場合、関数が-1
代わりに返すことですnil
更新: @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;
}
}