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;
}
}