我注意到当比较函数返回0时,IE9排序顺序正在改变元素顺序。
请参见:
var myarray=[
{id:1,val:0},
{id:2,val:0},
{id:3,val:7},
{id:4,val:41}
];
myarray.sort(function(a,b){return a.val - b.val});
for(var i in myarray)
{
console.log(myarray[i].id);
}当前稳定版本的Chrome、火狐、Opera和Safari的输出结果如下:1 2 3 4。
IE7和IE8的输出相同。
IE9输出为:2 1 3 4
为什么?这正常吗?
发布于 2011-01-24 22:22:49
如果您试图迭代数值属性,请不要在数组上使用for...in,原因有二:
Array.prototype中的方法和属性;这两点也适用于Object。Chrome实际上并不符合最常见的浏览器行为,导致了heated debate in a Chrome bug report。
发布于 2011-01-24 22:11:27
根据您的排序函数,这两个元素是相等的,它们以什么顺序出现并不重要。这取决于浏览器,要么保持订单不变,要么切换订单,因为它认为appropriate...neither是一种保证。
如果两者不相等,那么您的排序函数是不正确的,应该将其他项也考虑在内。
https://stackoverflow.com/questions/4782893
复制相似问题