1

我在 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? 
    }

有什么建议么?谢谢。

4

1 回答 1

0

使用以下代码工作的 jsFiddle 在这里

首先,您的数据对象设计不佳。如果您想对其进行迭代,则意味着它包含 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 中的数组和对象的问题的回答。

    for (var i = 0, len = data.length; i < len; i++) {
        data[i].x.something = "x";
        console.log(data[i].x.something);
    };
于 2013-03-13T14:20:17.597 回答