2014-03-30 81 views
1
for (var i = 0; i < 7; i++) { 
    var _name = moment().subtract('days', i).format('dddd'); 
    week_count.push({ 
     _name: 0 
    }); 
} 

這是我正在嘗試做的 - 但是,這會創建一個名爲_name的屬性的對象列表,我該如何去做這件事?我試圖像{ moment().subtract('days',i).format('dddd') : 0 }那樣執行它,但是這導致了語法錯誤。我如何去實現這一目標?如何動態表示我的對象屬性名稱?

回答

4

不能指定對象內的動態屬性名稱文字,但可以使用bracket syntax代替:

for (var i = 0; i < 7; i++){ 
    var _name = moment().subtract('days',i).format('dddd'); 
    var obj = {}; 
    obj[_name] = 0; 
    week_count.push(obj); 
} 
2

您需要使用下標符號指定密鑰動態

for (var i = 0; i < 7; i++) { 
    var _name = moment().subtract('days', i).format('dddd'), object = {}; 
    object [_name] = 0; 
    week_count.push(object); 
} 

你可能會稍微縮短一點,像這樣

for (var i = 0; i < 7; i++) { 
    var object = {}; 
    object[moment().subtract('days', i).format('dddd')] = 0; 
    week_count.push(object); 
} 

如果您正在尋找一種方法在一條線上做到這一點,那麼您可能需要使用Object.defineProperty,像這樣

for (var i = 0; i < 7; i++) { 
    var _name = moment().subtract('days', i).format('dddd'); 
    week_count.push(Object.defineProperty({}, _name, {value:0,enumerable:true})); 
}