我的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这样的数据类型时进行排序吗?
答案 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()函数,直接将时间戳作为键,进行相应的排序,然后将其转换为日期格式。愚蠢的错误,但花了一些时间。