2013-10-24 22 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) 
    ]; 
});