Javascript 排序功能在 Safari/iPhone 中不起作用

标签 javascript iphone sorting safari

我已经浏览了之前提出的有关该主题的大部分问题,但仍然无法让我的问题发挥作用。

我有这段代码,它对对象数组进行排序:

array.sort(function(a,b){
  var dateA=new Date(a.created_time), dateB=new Date(b.created_time)
  return (dateB > dateA) ? 1 : (dateB < dateA) ? -1 : 0;
});

在 FF 和 Chrome(桌面)中工作正常,但在 Safari(桌面/iPhone)和 Chrome(iPhone)中失败

对象数组是来自 Facebook 的 AJAX 调用,获取墙提要,我想按创建时间排序。

提前致谢...

最佳答案

问题是 Safari 和其他提到的浏览器(iPhone 上的 chrome)无法解析您传递给构造函数的输入字符串。结果是 Invalid Date哪个基元值为 NaN

因此,排序函数无法按预期工作,比较 return (NaN > NaN) ? 1 : (NaN < NaN) ? -1 : 0; ,结果为return 0

为了解决这个问题,用最少的解析工作,我想到只分割字符串 通过-|:|T|\+ 。并单独使用日期部分来构造 new Date

注意:不幸的是,像 var d = Date.apply([year,month,...]) 这样的事情是不可能的

这是一个在 Safari 上适用的排序函数

var dates = [{
        name: "A",
        created_time: '2013-06-05T08:05:06+0000'
    }, {
        name: "B",
        created_time: '2013-06-03T10:05:06+0000'
    }, {
        name: "C",
        created_time: '2013-06-03T01:05:06+0000'
    }
];

var sorted = dates.sort(function (a, b) {
        var reg = /-|:|T|\+/; //The regex on which matches the string should be split (any used delimiter) -> could also be written like /[.:T\+]/
        var parsed = [ //an array which holds the date parts for a and b
            a.created_time.split(reg), //Split the datestring by the regex to get an array like [Year,Month,Day,Hour,...]
            b.created_time.split(reg)
        ];
        var dates = [ //Create an array of dates for a and b
            new Date(parsed[0][0], parsed[0][1], parsed[0][2], parsed[0][3], parsed[0][4], parsed[0][5]),//Constructs an date of the above parsed parts (Year,Month...
            new Date(parsed[1][0], parsed[1][1], parsed[1][2], parsed[1][3], parsed[1][4], parsed[1][5])
        ];
        return dates[0] - dates[1]; //Returns the difference between the date (if b > a then a - b < 0)
    });

这给出了输出:

console.log(sorted);
/*
[{
        "created_time": "2013-06-03T01:05:06+0000",
        "name": "C"
    }, {
        "created_time": "2013-06-03T10:05:06+0000",
        "name": "B"
    }, {
        "created_time": "2013-06-05T08:05:06+0000",
        "name": "A"
    }
]
*/

演示 JSBin

关于Javascript 排序功能在 Safari/iPhone 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16892525/

相关文章:

iphone - 将文件中的图像发布到 Facebook?

javascript - iPhone safari 不缩放(缩放)部分内容

Python:将值读入空数组,然后返回文件

javascript - React setState 不起作用,它的回调也不起作用

javascript - 无法将函数传递给 react 中的子组件?

iphone - UINavigationController 在堆栈上具有相同 View Controller 的两个副本

php - mysql全文搜索对最佳结果进行排序,然后按其他项目再次排序

java - 如何按时间和相似度对列表进行排序?

javascript - 通过画圆圈在 Google map 上选择自定义标记

javascript - jQuery 如何在 each() 中向前看?