根据javascript中的时间戳排序

时间:2012-08-03 21:25:48

标签: javascript sorting

我的javascript中有两个变量。 消息功能:var message 时间戳功能:var date(时间戳类型)..

现在我有一个根据时间戳存储消息的数组。像

这样的东西
    var input = []; //dynamic array to store both message and date
    var date = new Date(update.data.history[i].timestamp * 1000); //Getting from Json object
    var date_input = date.toLocaleTimeString();
    var message = update.data.history[i].message;
        for (i to length)
    {
        input.push({ key: date_input, value: message });     //Key refers to date, and value to message
    }
   input.sort(sort_by(key,true,parseInt));

我的函数sort_by

var sort_by = function(field, reverse, primer){

   var key = function (x) {return primer ? primer(x[field]) : x[field]};

   return function (a,b) {
       var A = key(a), B = key(b);
       return (A < B ? -1 : (A > B ? 1 : 0)) * [1, -1][+!!reverse];                  
   }
}

现在,我尝试使用firebug进行调试,并注意到我的排序功能无效。我使用时间戳作为关键,但仍然没有运气。无论如何我可以根据时间戳对其进行排序然后显示它。 我在SO上尝试了其他排序解决方案,但我想还有另一种方法可以在存在像timestamp这样的数据类型时进行排序吗?

2 个答案:

答案 0 :(得分:1)

在对象文字中,您不必引用密钥:

input.push({ key: date_input, value: message });

但是,你的函数有三个参数,这些参数没有以类似对象的符号给出,所以key的含义是未知的并且会导致一个ReferenceError:

input.sort(sort_by(key,true,parseInt));
                   ^
ReferenceError: key is not defined

使用字符串作为参数,它应该起作用:

input.sort(sort_by("key",true,parseInt));

答案 1 :(得分:1)

排序功能完美无缺。当我用firebug进行调试时,我在控制台上看到即使日期输入是“6-29-07 am”,它只是将6作为“关键”,因此在该特定日期的每个条目都分配了同样的关键。因此,排序无法提供所需的输出。因此,我在第二行避免使用新的date()函数,直接将时间戳作为键,进行相应的排序,然后将其转换为日期格式。愚蠢的错误,但花了一些时间。