使用下划线js复制列表项

时间:2013-10-24 10:50:21

标签: javascript angularjs underscore.js

我有一个带有一些日期的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类可以做到这一点。非常感谢你。

1 个答案:

答案 0 :(得分:0)

你需要某种concatMap,这是Underscore不提供的。您可以使用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)
    ];
});