2

私は次のようなJavascriptのアイテムの配列を持っています:

var data =
[
{"id":"338b79f07dfe8b3877b3aa41a5bb8a58","date":"2000-10-05T13:21:30Z","value":  {"country":"United States"}},
{"id":"338b79f07dfe8b3877b3aa41a5bb983e","date":"2000-02-05T13:21:30Z","value":{"country":"Norway"}},
{"id":"338b79f07dfe8b3877b3aa41a5ddfefe","date":"2000-12-05T13:21:30Z","value":{"country":"Hungary"}},
{"id":"338b79f07dfe8b3877b3aa41a5fe29d7","date":"2000-05-05T13:21:30Z","value":{"country":"United States"}},
{"id":"b6ed02fb38d6506d7371c419751e8a14","date":"2000-05-05T18:15:30Z","value":{"country":"Germany"}},
{"id":"b6ed02fb38d6506d7371c419753e20b6","date":"2000-12-05T18:15:30Z","value":{"country":"Hungary"}},
{"id":"b6ed02fb38d6506d7371c419755f34ad","date":"2000-06-05T18:15:30Z","value":{"country":"United States"}},
{"id":"b6ed02fb38d6506d7371c419755f3e17","date":"2000-04-05T22:15:30Z","value":{"country":"Germany"}},
{"id":"338b79f07dfe8b3877b3aa41a506082f","date":"2000-07-05T22:15:30Z","value":{"country":"United Kingdom"}},
{"id":"9366afb036bf8b63c9f45379bbe29509","date":"2000-11-05T22:15:30Z","value":{"country":"United Kingdom"}}
];

日付で配列を照会(削減)する必要があります。事前に決定された日付よりも大きいか小さいかのいずれか。現在の日付。

これを行うには、アンダースコアのreduceメソッドを使用することを考えていました。誰かが私がこれを行う方法の例を提供できますか?

編集:私はこのようなことを試みています:

var itemsByDate = _(items).reduce(function(memo, item) {
memo[item.date] = memo[item.date] || [];
memo[item.date].push(item);
return memo;
}, {});

console.log((JSON.stringify(itemsByDate["2000-11-05T22:15:30Z"])));​

しかし、これは完全に一致するものを探し、文字列であるため、おそらく日付を適切に処理しません。

よろしく、

カールスキー

4

1 に答える 1

1

セットをフィルタリングする場合は、次のようにします。

var reduced = data.filter(function(obj) {
    var date = +(new Date(obj.date));
    return date < someDate || date > someOtherDate
});

セットのペアに減らしたい場合は、次のようにします。

var now = Date.now();

var reduced = data.reduce(function(ret, obj) {
    var date = +(new Date(obj.date));
    if (date < now)
        ret.before.push(obj);
    else
        ret.onOrAfter.push(obj);
    return ret;
}, {before:[], onOrAfter:[]});
于 2012-10-08T18:42:42.220 に答える