-1

例如,我有一个带有一些日期的 json,看起来像这样

jsonEvents = [
    {'event_name':'event1','event_start':'2013-10-23','event_stop':'2013-10-29'},
    {'event_name':'event2','event_start':'2013-10-23','event_stop':'2013-10-25'}
];

我想用 underscoreJS 把这个事件减半(只是为了让这个想法更简单)。我想要的输出看起来像这样。

jsonEvents = [
    {'event_name':'event1','event_start':'2013-10-23','event_stop':'2013-10-26'},
    {'event_name':'event1','event_start':'2013-10-26','event_stop':'2013-10-29'},
    {'event_name':'event2','event_start':'2013-10-23','event_stop':'2013-10-24'},
    {'event_name':'event2','event_start':'2013-10-24','event_stop':'2013-10-25'}
];

我希望我能以简单的方式做到这一点,我正在做一个 angularJS 项目,我希望 underscoreJS 类可以做到这一点。非常感谢。

4

1 回答 1

0

为此,您需要某种concatMapUnderscore 不提供的东西。您可以使用 jQuery$.map来执行此操作,也可以自己构建它:

var concatMap = _.compose(_.flatten, _.map);

现在,您可以遍历数组并为每个项目返回一个包含两个事件的数组:

function createEvent(name, start, end) {
    return {
        "event_name": name,
        "event_start": format(start),
        "event_stop": format(end)
    };
}
jsonEvents = concatMap(jsonEvents, function (event) {
    var from = new Date(event.event_start),
        to = new Date(event.event_stop),
        mid = new Date( (+startDate + stopDate) / 2 );
    return [
        createEvent(event.event_name, from, mid),
        createEvent(event.event_name, mid, to)
    ];
});
于 2013-10-24T11:21:59.620 回答