如何将动态对象推入数组?

3

可能是重复问题:
JavaScript表达式来定义对象的属性名?

我正在尝试将对象添加到数组中,但我希望名称和值是动态的。以下是一个示例:

    (function(){
        var data = [];

        for(i=0; i<5; i++){
            data.push({'name' + i: i});
    }

        console.log(data);
    })()

我猜我不能使用变量作为属性,所以我不确定该怎么办。


尽管下面的答案是正确的,但我必须问一下,你为什么要这样做?你不得不以笨拙的方式访问它:data[i]['name' + i] 来获取 i... 这是毫无意义的。 - Shmiddty
@shmiddty 这只是我做的一个简单示例,以免混淆任何人的不必要细节。 - Dan
但是,重点在于,如果您将项目推送到数组中,则“data [i] ['name' + i]”是无意义的。为什么不直接使用“data [i] .name”? - Shmiddty
3个回答

12

如果要使用动态命名的属性,需要使用数组访问符号:

var temp = {};
temp['name' + i] = i;
data.push(temp);
在 IIFE 中:
(function(){
    var data,
        temp,
        i;
    data = [];
    for (i = 0; i < 5; i += 1) {
        temp = {};
        temp['name' + i] = i;
        data.push(temp);
    }
    console.log(data);
}());

5

修改后的代码:可以使用“[]”将基于变量值的键添加到对象中。jsfiddle

 (function(){
        var data = [], a;

        for(i=0; i<5; i++){
             a = {};
             a['name' + i] = i;
            data.push(a);
    }

        console.log(data);
    })()

3

就像这样:

for(i=0; i<5; i++){
    var obj = {};
    obj["name" + i] = i;
    data.push(obj);
}

但我想知道为什么您想将索引硬编码到属性名称中。

因为您已经有了一个数组,已经有了相关的索引。这也使属性难以查找。

如果您需要原始索引的关联,我建议使用单独的属性。

for(i=0; i<5; i++){
    data.push({name: i, idx: i});
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接