【问题标题】:Setting object inside the for loop在 for 循环中设置对象
【发布时间】:2013-03-01 12:21:24
【问题描述】:

我在 for 循环中设置数据对象的值时遇到问题。

// data object
var data = {
  title: '',
  x: {
    something: 'test',
    someVar: ''
  },
  y : {
    something: '',
    someVar: ''
  },
  dots: []
}

例如,我想设置(或更新)data.x.something = "tested";我可以 console.log 并查看经过测试的更新值。但是,在我的 for 循环中,它会产生一个错误:

    for(var i = 0, len = data.length; i < len; i++) {
      data.x.something = "x";
      console.log('data.x.something', data.x.something);
      // log says "Uncaught TypeError: Cannot set property 'something' of undefined". How come I can't set the var inside my for loop? 
    }

有什么建议吗?谢谢。

【问题讨论】:

  • 两件事:您的 data 对象显然没有公开 length 属性,并且您使用未加引号的保留字 (else) 作为属性名称,这是语法错误.
  • TypeError 非常具有描述性:data.x 是 undefined,您必须在为其分配属性之前将其设置为对象
  • 调试时,你的for循环中'x'的值是多少?看起来它是未定义的
  • @DavidL data.x 未定义。
  • @chatu 为什么不发布更多代码?从这里有限的样本中很难判断发生了什么。

标签: javascript


【解决方案1】:

使用以下代码工作的 jsFiddle 是 HERE

首先,您的数据对象设计不佳。如果你想遍历它,那就意味着它拥有 x 个相同类型的对象。

 var data = [
    {// first object with the properties.
      title: '',
      x: {
        something: 'test',
        someVar: ''
      },
      y : {
        something: '',
        someVar: ''
      },
      dots: []
    }, {// second object with same properties
      title: '',
      x: {
        something: 'test2',
        someVar: ''
      },
      y : {
        something: '',
        someVar: ''
      },
      dots: []
    }
];

其次,这不是您迭代对象的方式。这是因为 JavaScript 对象没有长度属性,这不是迭代对象的正确方法。如果您需要一个集合来保存 k 类型的 n 个对象(具有一组特定的属性),那么请使用数组,否则您将需要更多无用的嵌套。关于 JS 中的数组和对象,请参阅我对 this question 的回答。

    for (var i = 0, len = data.length; i < len; i++) {
        data[i].x.something = "x";
        console.log(data[i].x.something);
    };

【讨论】:

    猜你喜欢
    • 2021-02-27
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2019-01-23
    相关资源
    最近更新 更多