由于ECMA标准涵盖了有关排序数组的内容(以非常简化的方式):
- 如果比较接收到1,则A向下移动一个位置。
- 如果接收到-1,则保持位置并将排名优先于B。
- 如果接收到0,则不执行任何操作。
确保在所有浏览器中保证相同行为的最安全方法是:
abc =[10,2,4,1];
abc.sort(function( a , b ){
return a > b ? -1 : 1;
});
abc.sort(function( a , b ){
return a > b ? 1 : -1;
});
可以使用短版来处理原始对象。
abc.sort(function( a , b ){
return b - a;
});
abc.sort(function( a , b ){
return a - b;
});
如果您有以下数组:
var items = [
{ name: 'Edward', value: 21 },
{ name: 'Sharpe', value: 27 },
{ name: 'And', value: 31 },
{ name: 'The', value: -12 },
{ name: 'Zeros', value: 37 },
{ name: 'Magnetic', value: 37 }
]
正确的方法是:
items.sort(function( a , b ){
var result = a == b ? 0 : b > a ? -1 : 1
if(result === 0)
{
}
return result ;
});
这是正确的方法,因为浏览器迭代的方式在ECMA标准中没有定义,而且不同的浏览器可能会以不同的方式进行迭代。例如,大多数浏览器从上到下迭代,但Chrome会将第一个元素与最后一个元素一起迭代并向上移动。因此,在紧密的情况下,大多数浏览器的结果可能会有所不同。