1

我的 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 上尝试了其他排序解决方案,但我想当有像时间戳这样的数据类型时还有另一种排序方法?

4

2 回答 2

1

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

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

但是,您的函数需要三个参数,这些参数不是以类似对象的表示法给出的,因此其含义key是未知的,并且会导致 ReferenceError:

input.sort(sort_by(key,true,parseInt));
                   ^
ReferenceError:未定义键

改为使用字符串作为参数,它应该可以工作:

input.sort(sort_by("key",true,parseInt));
于 2012-08-03T22:23:12.967 回答
1

排序功能完美运行。当我用 firebug 调试它时,我在控制台上看到即使 date-input 是“6-29-07 am”,它也只将 6 作为“key”,因此那天的每个条目都被分配了同一把钥匙。因此,排序无法提供所需的输出。因此,我在第二行中避开了 new date() 函数,直接将时间戳作为键,进行相应的排序,然后将其转换为日期格式。愚蠢的错误,但需要一些时间。

于 2012-08-08T14:33:37.300 回答