2017-02-14 76 views
0

我试图创建一个将某些值插入到对象中的脚本。将值插入循环中的对象

我基本上要通过一系列的对象会是这个样子的,结束了 -

myObj.data.person[0].name = 'name 1'; 
myObj.data.person[1].name = 'name 2'; 
myObj.data.person[2].name = 'name 3'; 

这里是我的对象,它包含对象的数组。

var addressBook = { 
    data: [ 
    person = { 
     name: '', 
     address: '' 
    } 
    ] 
} 

和for循环插入重复信息。

for (i=0; i < 10; i++) 
    { 
    myObj.data.person[i] = {name: 'Joe Bloggs', address: 'Main Street'}; 
    console.log(myObj.data.person.name); 
    } 

每当我运行此代码我碰到下面的错误 -

Uncaught TypeError: Cannot set property 'person' of undefined at <anonymous>:14:24 

所以,问题是我在哪里去了?此外,这会被认为是创建一个对象列表(例如第1个人,第2个人等)的正确方法吗?我最终想着如何创建类似Person构造函数的东西,并使用循环来创建多个Person对象)。

感谢,

+0

您需要正确地宣布你的'myObj'财产, – Tom

+0

声明你的对象作为'addressBook',但后来尝试访问它作为'myObj'? – Connum

+0

'data:[person = ...]'是无稽之谈。如果'data'是一个数组,那么你也不能'data.person [']''。你可能只需要'data:[{name ...}]',并操作'data [i]'。 – deceze

回答

1

请试着改变你的对象的符号在下列方式

var addressBook = { 
    data: [{ 
     name: '', 
     address: '' 
    }, 
    { 
     name: 'Roshan', 
     address: '' 
    }, 
    { 
     name: 'Roshan1', 
     address: '' 
    } 
    ] 
} 
+0

这是*一半*答案... – deceze

+0

Iam编辑我的答案将完成答案 –

+0

感谢Isetty和Deceze。这是正确的解决方案。 –

0

试试这个:

myObj.data[i].person = 'John'; 
myObj.data[i].address = 'NYC'; 
0

看到这个答案的增编isetty ravitejakumarAnswer

你应该考虑写一个原型/ class为你的用例。 在这种情况下,您可以更好地跟踪数据。

也许是这样的:

var AddressBook = {}, 
    Person = {}; 

(function() { 
    AddressBook.prototype = { 
     data: [], 
     add: function(person) { 
      this.data.push(person); 
     } 
    }; 
    Person = function(name, address) { 
     this.name = name; 
     this.address = address; 
    } 
    Person.prototype = { 
     name, 
     address 
    }; 
})(); 
+0

谢谢jayjay - 这也是非常有用的知道。除了我在原始问题中提到的问题之外 - 这正是我最终试图建立的。干杯。 –

+0

@JonK不客气。 –