1

私のjavascriptには2つの変数があります。メッセージ関数: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

ソート機能は完璧に機能します。firebug でデバッグしていたとき、コンソールで date-input が「6-29-07 am」であるにもかかわらず、「キー」として 6 しか使用されていないことがわかりました。そのため、その特定の日のすべてのエントリに同じキー。したがって、並べ替えでは目的の出力を得ることができませんでした。したがって、2 行目の new date() 関数を避け、タイムスタンプをキーとして直接取得し、それに応じて並べ替えてから、日付形式に変換しました。ばかげたエラーですが、時間がかかりました。

于 2012-08-08T14:33:37.300 に答える
1

オブジェクト リテラルでは、キーを引用する必要はありません。

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

ただし、関数は 3 つの引数を受け取りますが、これらはオブジェクトのような表記法で指定されていないため、 の意味keyは不明であり、ReferenceError が発生します。

input.sort(sort_by(key,true,parseInt));
                   ^
ReferenceError: キーが定義されていません

代わりに文字列を引数として使用すると、機能するはずです。

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