在for循环中设置对象

时间:2013-03-13 14:01:10

标签: javascript

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

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

例如,我想设置(或更新)data.x.something =“tests”;我可以在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? 
    }

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:0)

使用以下代码工作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对象没有length属性,这不是迭代对象的正确方法。如果你需要一个集合来保存类型为k的n个对象(具有一组特定的属性),那么使用一个数组,否则你将需要更多无用的嵌套。请参阅我对this question关于JS中数组和对象的回答。

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