【问题标题】:How can I push a dynamic object into array? [duplicate]如何将动态对象推入数组? [复制]
【发布时间】:2012-10-10 08:32:05
【问题描述】:

可能重复:
Javascript expression to define object’s property name?

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

    (function(){
        var data = [];

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

        console.log(data);
    })()

我想我不能为属性使用变量,所以我不知道该怎么做。

【问题讨论】:

  • 虽然下面的答案是正确的,但我不得不问你为什么要这样做?您必须以一种尴尬的方式访问它:data[i]['name' + i] 才能获得 i... 这很荒谬。
  • @shmiddty 这只是我做的一个简单的例子,所以我没有用不必要的细节混淆任何人。
  • 但是,重点仍然存在,如果您将项目推送到数组中,data[i]['name' + i] 毫无意义。为什么不直接使用data[i].name

标签: javascript arrays object loops dynamic


【解决方案1】:

如果要使用动态命名的属性,则需要使用数组访问表示法:

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);
}());

【讨论】:

    【解决方案2】:

    修改代码:可以使用'[]'将基于变量值的键添加到对象中。 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});
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-03
        • 2016-12-25
        • 2019-03-24
        • 2022-06-11
        • 2017-05-01
        • 2017-12-05
        相关资源
        最近更新 更多