如何动态表示我的对象属性名称?

时间:2014-03-30 17:41:31

标签: javascript

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 }那样执行它,但这导致语法错误。我该如何实现这一目标?

2 个答案:

答案 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);
}

答案 1 :(得分: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}));
}