2015-12-01 83 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