2015-12-01 123 views
-1

我有一個靜態值的對象數組。我想採取每個對象的startsAt和endsAt值,並將其傳遞到只有這兩個值的新數組中。將對象的值推入新的對象數組

對象與靜態值:

var events = [{ 
     title: 'An event', 
     type: 'warning', 
     startsAt: moment().startOf('week').subtract(2, 'days').add(8, 'hours').toDate(), 
     endsAt: moment().startOf('week').add(1, 'week').add(9, 'hours').toDate() 
    }, { 
     title: 'Another event title', 
     type: 'info', 
     startsAt: moment().subtract(1, 'day').toDate(), 
     endsAt: moment().add(5, 'days').toDate() 
    }, { 
     title: 'This is a really long event title that occurs on every year', 
     type: 'important', 
     startsAt: moment().startOf('day').add(7, 'hours').toDate(), 
     endsAt: moment().startOf('day').add(19, 'hours').toDate(), 
     recursOn: 'year' 
    }]; 

而且我想借此事件startsAt和endsAt並將其推入checkDates:

var checkDates = [{ 
     start: this.events.startsAt, 
     end: this.events.endsAt 
    }]; 

我怎麼會讓它所以如果我安慰日誌checkDates,它會告訴我每個事件的開始時間和結束時間?當前的代碼返回undefined。

回答

0

樂趣地圖:

var checkDates = events.map(function (item) { 
    return { 
    start: item.startsAt, 
    end: item.endsAt 
    }; 
}); 
+0

就像一個說明,它不會在IE9下工作,因爲它是在第5版的ECMA-262標準中引入的。一個polyfill可以在這裏找到(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Polyfill)。 – shennan

1

配圖

var checkDates= events.map(function (event) { 
    return { 
    start: event.startsAt, 
    end: event.endsAt 
    } 
}); 

console.log(checkDates); 

如果瀏覽器不支持map然後用for

var checkDates = []; 

for (var i = 0; i < events.length; i++) { 
    var event = events[i]; 
    checkDates.push({ 
    start: event.startsAt, 
    end: event.endsAt 
    }); 
} 

通過您可以使用forEach的方式。但是,如果瀏覽器不支持forEarch。你可以像這樣使用技巧。

if (typeof Array.prototype.forEach != 'function') { 
    Array.prototype.forEach = function(cb){ 
    for (var i = 0; i < this.length; i++){ 
     cb.apply(this, [this[i]]); 
    } 
    }; 
} 

var checkDates = []; 

events.forEach(function(event){ 
    checkDates.push({ 
    start: event.startsAt, 
    end: event.endsAt 
    }) 
}); 
+0

謝謝你的努力。我會牢記這一點。 :) –

0

只是爲了簡單起見,這裏是沒有map的解決方案(這將在IE9工作及以下):

var checkDates = []; 

for (var i = 0; i < events.length; i++) { 

    checkDates.push({ startsAt: events[i].startsAt, endsAt: events[i].endsAt }); 

} 

如果您更願意使用JavaScript map方法,但還是要支持IE9及以下版本,您可以隨時使用Polyfill like this one