将对象的值推入新的对象数组

时间:2015-12-01 10:32:53

标签: javascript

我有一组带有静态值的对象。我想取每个对象的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。

3 个答案:

答案 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