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 找到了一个函数here。它工作得很好,你可以在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;
}
}
答案 0 :(得分:13)
据我所知,JavaScript中没有这样的运算符但您可以使用enter image description here函数:
Math.sign(a - b);
注意:正如评论中提到的,所有浏览器目前都不支持Math.sign()。检查兼容性(Math.sign())。
答案 1 :(得分:8)
来自: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;
}
}