chrome中的等值Javascript排序数组

chrome中的等值Javascript排序数组,javascript,arrays,google-chrome,sorting,Javascript,Arrays,Google Chrome,Sorting,我有这个排序函数,但我用它来排序一个表,我可以按日期(为了简单起见,我去掉了它)和字符串排序,但是整数是wierd,一个常见的情况是所有值都可以是0,这将给出数组 [0,0,0,0] 这在firefox中非常有效,但在chrome中却不行,它改变了我表格中的行的顺序,尽管它们是相等的,但我甚至遵循了ECMA标准。为什么chrome会改变订单呢?我也尝试过使用 return (ascending_order ? a - b : b - a) 但结果与我处理不同数据类型的更通用方法相同 arr.

我有这个排序函数,但我用它来排序一个表,我可以按日期(为了简单起见,我去掉了它)和字符串排序,但是整数是wierd,一个常见的情况是所有值都可以是0,这将给出数组

[0,0,0,0]
这在firefox中非常有效,但在chrome中却不行,它改变了我表格中的行的顺序,尽管它们是相等的,但我甚至遵循了ECMA标准。为什么chrome会改变订单呢?我也尝试过使用

return (ascending_order ? a - b : b - a)
但结果与我处理不同数据类型的更通用方法相同

arr.sort(function(a, b){
    var onlydigitsRegex = new RegExp("\d+","g");
    if (a.match(onlydigitsRegex) && b.match(onlydigitsRegex)) {
      a = parseInt(a);
      b = parseInt(b);
    } else {
      a = a.toLowerCase();
      b = b.toLowerCase();
    }
    return (a === b) ? 0 : (ascending_order ? ((a > b) ? 1 : -1) : ((a < b)? 1 : -1));
    });
arr.sort(函数(a,b){
var onlydigitsRegex=newregexp(“\d+”,“g”);
if(a.match(onlydigitsRegex)和&b.match(onlydigitsRegex)){
a=parseInt(a);
b=parseInt(b);
}否则{
a=a.toLowerCase();
b=b.toLowerCase();
}
返回值(a==b)?0:(升序)((a>b)?1:-1:((a
什么是
a_值
b_值
?设置它们的Post JavaScript的
array.sort()
不能保证是稳定的,也就是说,您不应该依赖相同值的项来保持其原始顺序。事实上,它们在Firefox中保持不变是很好的,但在未来的版本中可能会发生变化,并且仍然在标准范围内。有关跨浏览器稳定性的更多信息,以及有关强制执行稳定性的讨论,请参阅。Array.prototype.sort不保证稳定。可能重复