我有一组带有静态值的对象。我想取每个对象的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'
}];
我想采取启动结束事件并将其推入checkDates:
var checkDates = [{
start: this.events.startsAt,
end: this.events.endsAt
}];
如果我控制日志检查日期,我将如何制作它,它会显示每个事件的开始时间和结束时间?当前代码返回undefined。
答案 0 :(得分: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
})
});
答案 1 :(得分:0)
有趣的地图:
var checkDates = events.map(function (item) {
return {
start: item.startsAt,
end: item.endsAt
};
});
答案 2 :(得分: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。