jan*_*mon 25 javascript arrays sorting google-chrome
有没有办法使用Chrome对数组进行排序?
使用sort函数不起作用,如下例所示:
var myArray = [1,4,5,3,2];
myArray.sort ( function( a , b ){
return b>a
});
for ( var i = 0; i < myArray.length; i++ )
{
document.write( myArray[i] )
}
Run Code Online (Sandbox Code Playgroud)
Firefox/IE/Opera/Safri输出: 54321
Chrome输出: 53241
谢谢你的时间!
Kob*_*obi 35
这似乎是标准的,返回负数,正数或零数.
myArray.sort ( function( a , b ){
return a-b;
});
Run Code Online (Sandbox Code Playgroud)
http://www.w3schools.com/jsref/jsref_sort.asp
由于ECMA标准涵盖排序数组(以非常简单的方式):
在所有浏览器中保证相同行为的最安全方法是:
// descending order
abc =[10,2,4,1];
abc.sort(function( a , b ){
return a > b ? -1 : 1;
});
// ascending order
abc.sort(function( a , b ){
return a > b ? 1 : -1;
});
Run Code Online (Sandbox Code Playgroud)
对于原始对象,可以使用短版本
// descending order
abc.sort(function( a , b ){
return b - a;
});
// ascending order
abc.sort(function( a , b ){
return a - b;
});
Run Code Online (Sandbox Code Playgroud)
对于像这样的对象
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 }
Run Code Online (Sandbox Code Playgroud)
正确的方法是:
items.sort(function( a , b ){
var result = a == b ? 0 : b > a ? -1 : 1
if(result === 0)
{
// implement a tight break evaluation
}
return result ;
});
Run Code Online (Sandbox Code Playgroud)
这是正确的方法,因为浏览器迭代的方式没有在ECMA标准中定义,浏览器可能以不同的方式迭代.例如,大多数浏览器从上到下进行迭代,但chrome会将第一个元素与最后一个元素一起迭代并向上移动.因此,如果紧张可能导致大多数浏览器的不同结果.