【问题标题】:Create new object within a for-in-loop在 for-in-loop 中创建新对象
【发布时间】:2011-04-12 07:02:48
【问题描述】:

我想创建一个新对象并为存储在某个 json 中的每个数组分配一些属性。我有这个主要工作除了......

for (var i in json) {

            a = 0;
            a++;
            a = new Object();

            for (var key in json[i]) {
                var Key = key;
                var Value = json[i][key];
                a[Key] = Value;
            }
            a.outputProperties();
        }

当我输出对象属性时,一切都是未定义的。

如果我在循环外创建一个对象并将属性分配给它,它似乎工作正常,除了第一组属性被以下内容覆盖。不知道为什么我不能在循环内动态创建对象和分配属性。

【问题讨论】:

  • 你应该可以。我们可能需要查看更多代码(例如,sup2 来自哪里?)。
  • a = 0;一个++; a = 新的补充();在每次迭代中,您将 a 设置为 0,然后设置为 1,然后设置为对象。那是怎么回事?
  • 我想为每个循环迭代创建一个新对象。我想我可以增加一个变量值并使用它来创建新的对象名称。那没用。
  • 这成功了:theGoods["obj"+i] = new Object();

标签: javascript oop object properties for-in-loop


【解决方案1】:

您从未真正设置过a 的任何属性。您只需设置sup2 的属性。在旁注中,您还有其他不必要的东西,例如 var Key = key; 试试这个:

for (var i in json) {
    var a = new supplement();
    for (var key in json[i]) {
        a[key] = json[i][key];
    }
    a.outputProperties();
}

【讨论】:

    【解决方案2】:

    您粘贴的代码在我看来不正确,从某种意义上说,它似乎没有挂在一起。

    这三行是​​做什么的:

         a = 0;
         a++;
         a = new supplement();
    

    你似乎用那里做了三件相互矛盾的事情。我的猜测是,a 意味着你没有显示的一些外部事物的索引。

    那是什么

         sup2
    

    应该是,和你之前做的supplement()有些关系?

    【讨论】:

    • 我在粘贴代码时犯了一些错误,然后为了便于理解而尝试概括。表明空腹编码是不值得的! =)
    【解决方案3】:

    Dave Smith 的回答非常接近我的需要,但它没有在循环中创建新对象。这是我更新后的代码,提供了所需的结果:

    for (var i in json) {
                theGoods["obj"+i] = new Object();
                for (var key in json[i]) {
                    theGoods["obj"+i][key] = json[i][key];
                }
                theGoods["obj"+i].outputProperties();
            }
    

    现在每个新对象都存储在一个数组 theGoods[] 中; 我现在可以通过编写如下内容来引用该对象:theGoods["obj2"].someMethod();

    【讨论】:

      【解决方案4】:
      for (var i in json) {
      
              a = new supplement();
      
              for (var key in json[i]) {
                  var Value = json[i][key];
                  a[Key] = Value;
              }
              a.outputProperties();
          }
      

      【讨论】:

        猜你喜欢
        • 2019-06-01
        • 2015-05-03
        • 2012-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 2020-03-10
        相关资源
        最近更新 更多