【问题标题】:creating javascript objects with unique names depending on counter in loop根据循环中的计数器创建具有唯一名称的 javascript 对象
【发布时间】:2012-04-25 18:29:36
【问题描述】:

我对 Javascript 还不够陌生,我有一个关于制定变量名称的小问题:

function createObjects(int length) {
  var count;
  for(count=0; count<length; count++;) {
    var personObj + "" + count;
  }  
}

在这里,我想为 for 循环的每次迭代制定一个不同的 personObj,这是正确的过程吗?这会给我: var personObj1 var personObj2 等等

谢谢! 马特

【问题讨论】:

  • 你打算在循环之后对这些对象做什么?存储它们?在哪里?
  • 你不能这样做,你必须创建一个数组并将变量存储在其中。只是好奇,您是 javascript 新手,想知道是否有其他语言允许我以这种方式创建变量。
  • 我想为每个对象创建属性,然后将它们存储在一个数组中,我应该为一个对象定义属性,然后将每个对象插入到数组中的索引中,然后重新初始化属性吗?

标签: javascript variables object loops


【解决方案1】:

如果您想拥有相同底层数据结构/逻辑的多个实例,您可以使用如下方法:

创建一个constructor function,它会生成一个带有您需要的属性(也是方法)的Object。例如:

function PersonObj(name, age) {
    this.name = name;
    this.age = age;
}

这使您可以使用var n = new PersonObj('Fred',32); 创建PersonObj 的新实例。现在您可以使用 Array 来存储这些对象的多个实例:

var persons = []; // creates a new Array

for (var i = 1; i < 13; i++){
    persons.push(new PersonObj('Alfred', i));
}

persons 现在将包含 12 个 1 到 12 岁的 Alfred。

如果你想改变 Alfred No. 3 的年龄,你可以这样做:

persons[2].age = 99;

a live demo

【讨论】:

    【解决方案2】:

    不要。动态生成变量从来都不是一个好主意。请改用对象或数组。它们旨在构建相关数据组。

    function createObjects(length) {
      var count, people = [];
      for(count=0; count<length; count++;) {
        people.push('something');
      }  
      return people;
    }
    

    【讨论】:

      【解决方案3】:

      为什么不使用数组来代替呢?

      【讨论】:

        【解决方案4】:

        如果需要,您可以随时将命名属性添加到窗口对象:

        function createObjects(int length) {
          var count;
          for(count=0; count<length; count++;) {
            window[personObj + "" + count] = new SomeObject();
          }  
        }
        

        【讨论】:

          【解决方案5】:

          创建对象,向对象添加属性并将对象存储在数组中。

          var al = new Array();
          function createObjects(int length) {
           var o = new Object();
            for(var count=0; count<length; count++;) {
                o.count = 'some value';
            } 
          al.push(o);
          }
          

          【讨论】:

            猜你喜欢
            • 2018-09-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-12
            • 1970-01-01
            • 1970-01-01
            • 2021-07-30
            • 1970-01-01
            相关资源
            最近更新 更多