Safari不像其他浏览器那样对对象数组进行排序
Safari doesn't sort array of objects like others browsers
var myArray = [{date:"2013.03.01"},{date:"2013.03.08"},{date:"2013.03.19"}];
我试着:
function(a,b){
return b.date > a.date;
}
和
function(a,b){
return b.date - a.date;
}
Chrome和Firefox中的console.log给了我想要的输出:
"2013.03.19", "2013.03.08", "2013.03.01"
but Safari给出原始排序:
"2013.03.01", "2013.03.08", "2013.03.19"
为什么?
JavaScript中的排序函数应该返回一个实数,而不是true或false或字符串或日期。该数字是正、负还是零都会影响排序结果。
试试这个sort函数(它也将正确地对任何字符串按反字母顺序排序):
myArray.sort(function(a,b){
return (b.date > a.date) ? 1 : (b.date < a.date) ? -1 : 0;
});
"2013.03.01"
不是日期。它是一个字符串
为了正确地按日期排序,您需要将这些转换为日期(时间戳)。
var myArray = [{date:"2013.03.01"},{date:"2013.03.08"},{date:"2013.03.19"}];
myArray.sort(function(a,b){
return Date.parse(b.date) - Date.parse(a.date);
});
您也可以使用直接字符串比较对它们进行排序:
myArray.sort(function(a,b){
return b.date.localeCompare(a.date);
});
相关文章:
- 将数组对象传递到struts2中的操作类
- 如何使用jquery返回php-json数组对象
- 从其名称获取javascript数组对象
- 值未与数组对象绑定
- 如何按数组/对象值的倍数过滤对象数组
- 在表中显示数组对象
- 在数组对象中分组
- 将第二个或多个数组推送到数组对象 AngularJS 中
- 重新排列 JavaScript 数组/对象
- 键上的javascript数组对象过滤器
- handontable:在不更改数据数组/对象的情况下隐藏某些列
- 用于跟踪购物车可用性的Javascript数组/对象/哈希表
- 重建有角度的java脚本数组对象
- 对JSON数组对象进行排序
- 连接与数组对象相关的文本:方式和位置
- 哪些浏览器和版本支持将常见的类数组对象直接传递到fn.apply()
- 如何使用Handlebars循环数组对象和模板
- 是否可以引用JS数组/对象中的另一个元素
- Javascript中的名称索引-数组/对象
- 数组长度不等于数组对象