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; } }
解决方法
来自:
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; } }