【问题标题】:Trying to add multiple properties to Javascript object using a loop尝试使用循环向 Javascript 对象添加多个属性
【发布时间】:2013-04-01 04:26:13
【问题描述】:

我希望你今天一切顺利。

所以我有一个没有属性的对象。我正在尝试使用循环向该对象添加多个属性。添加到循环中的每个属性将根据循环运行的次数多次出现在对象中,每个新属性递增 1。

所以我有这样的事情:

myObject = {  };

for(i = 0; i < 2; i++){
    myObject.propA + i = foo;
    myObject.propB + i = bar;
};

我想产生这样的东西:

myObject.propA0 = foo;
myObject.propB0 = bar;
myObject.propA1 = foo;
myObject.propB2 = bar;

根据循环运行的次数,动态生成一组漂亮的对象。但我似乎没有得到这个。那么在创建和分配变量时,我究竟如何将循环中的变量提供给属性呢?

【问题讨论】:

    标签: javascript object loops properties


    【解决方案1】:

    正如其他用户所说,您必须使用括号表示法来通过名称字符串引用属性:

    myObject['propA' + i] = 'foo';
    

    但是为什么不使用对象数组,而不是使用具有相似编号的属性名称的单个对象呢?像这样的:

    var myArray = [];
    for(i = 0; i < 2; i++){
        myArray.push({
            propA: 'foo',
            propB: 'bar'
        });
    };
    

    这应该产生:

    [
        { propA: 'foo', propB: 'bar'},
        { propA: 'foo', propB: 'bar'}
    ]
    

    在我看来,它看起来更干净。

    【讨论】:

      【解决方案2】:

      你可以使用

      object['popA'+i]=... 
      

      要创建标准属性或使用 getter/setter 属性,在这种情况下您需要使用

      Object.defineProperty(object, *propertyname*, *propertyDescriptor*).  
      

      后者为您提供了有关已创建属性的更多选项。

      所有细节都在这里:
      https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/defineProperty

      【讨论】:

        【解决方案3】:

        使用数组访问方法设置属性。

        myObject = {  };
        
        for(i = 0; i < 2; i++){
            myObject['propA' + i] = foo;
            myObject['propB' + i] = bar;
        };
        

        【讨论】:

        • 这也被证明是有用的,我当前项目中的一些对象作为数组组工作得更好。
        【解决方案4】:

        尝试对名称使用方括号表示法

           myObject['propa' + i] = foo;
        

        【讨论】:

        • 这确实做到了,非常感谢。
        猜你喜欢
        • 1970-01-01
        • 2021-01-05
        • 2021-11-12
        • 1970-01-01
        • 2018-04-25
        • 2011-11-09
        • 2013-11-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多