JavaScript IE 9:自定义排序函数
JavaScript IE 9: Custom sort function
在ie9中,如果我在控制台中输入:
[1, 4, 2, 3].sort(function (a, b) { return a < b; });
结果数组为:[1, 4, 2, 3]
.
如果我在FF/Chrome中这样做,我得到了它,反向排序:[4, 3, 2, 1]
。
为什么这个不能在IE中工作?
编辑:是否有一个函数在那里抽象这些浏览器差异?换句话说,是否存在一个函数,我可以传递function(a, b) {return a <b;}并在所有浏览器中获得相同的结果?有什么开源的东西吗?>
可能是因为如果a
较小,则函数应该返回-1
,如果它们相等,则返回0
,如果a
较大,则返回1
(反之亦然,如果您想要反向顺序)。编辑:事实上,它必须是零,一个正数或负数(正如@pimvdb所指出的,这就是我在下面的例子中使用的)。您的函数将永远不会返回-1
,这可能会产生问题。
考虑1
和3
。您的函数为1 < 3
返回1
,这是可以的,但为3 < 1
返回0
。在一种情况下,数字是不同的,在另一种情况下,你说它们是相等的。
FF/Chrome以相反的顺序排序可能是由于他们使用的排序算法。
试题:
[1, 4, 2, 3].sort(function (a, b) { return b - a; });
Update:为了证实这一点,我们可以看一下规范,第15.4.4.11节Array.prototype.sort(comparefn),其中给出了必须由比较函数实现的属性:
函数comparefn是一组值
S
的一致比较函数,如果集合S
中的所有值 A 、b和c(可能是相同的值)满足下列所有要求:符号 A <<sub>CF b表示comparefn(A,b) <0; = <子> CF子> 是 comparefn (a, b) = 0(的信号);和> <子> CF子> 是 comparefn (a, b) > 0。子>子>以上条件是保证 comparfn 将集合S划分为多个等价类,且这些等价类是完全有序的必要且充分的。
- 调用comparefn(a,b)总是返回相同的值v,当给定一对特定值a和b作为它的两个参数时。Type(v)为Number,且v不是NaN。注意,这意味着a <<sub>CF b中的一个, = <子> CF 子>,和> <子> CF子> 将适用于一个给定的和。子>
- 调用comparefn(a,b)不会修改this对象。
- = <子> CF 子>(反射)
- 如果 = <子> CF 子>, b = <子> CF 子>(对称)
- 如果 = <子> CF 子>和 b = <子> CF 子>,然后 = <子> CF 子> c (传递性= <子> CF ) 子>
- 如果 & lt; <子> CF 子>和 b & lt; <子> CF 子>,然后 & lt; <子> CF 子> c (传递性& lt; <子> CF ) 子>
- 如果> <子> CF 子>和 b > <子> CF 子>,然后> <子> CF 子> c (动词> <子> CF ) 子>
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- 为什么我的JavaScript堆栈排序函数不起作用
- jquery Onclick函数带有导致双击的回调排序函数
- 如何在具有相同 ID 的 Javascript 中按排序函数对关联数组进行排序
- ExtJS 4-自定义排序函数只在点击列标题后执行
- 为什么这个排序函数不起作用
- JavaScript排序函数未按预期工作
- Jslint 无法识别错误排序函数的选项
- 这个JS排序函数是如何工作的
- 返回相同排序的排序函数
- JavaScript排序函数排序时不应该排序
- 返回键的javascript排序函数
- Javascript排序函数错误地更改了元素'数组中的位置
- jQuery 引导网格排序函数不一致
- JavaScript 排序函数
- JavaScript 命名排序函数
- 这个排序函数内部的机制是什么
- JavaScript的原生排序函数是如何实现的
- AngularJS中的自定义排序函数
- JavaScript中的排序函数不起作用