2013-10-24 59 views
-1

我有一些日期,看起来像这样例如JSON使用下划线JS复制列表项

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类可以做到这一点。非常感谢你。

+0

是否有是一个深层复制(不同的变量),还是它可以是相同的参考? –

+0

我有一份它的副本。我用$ scope.jsonEvents = angular.copy($ scope.jsonOriginalEvents); –

回答

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) 
    ]; 
});