2011-04-27 103 views
0

我需要在javascript中声明一组对象,然后填充它们。作为新人,我似乎无法找到办法。声明未命名的对象Javascript

var ds {INT,STRING,STRING,STRING}; 
var myarr = [] 

我需要用动态填充的一组ds对象填充myarr。有人可以帮忙吗?

数据格式: ID,名称,城市评论

这是我目前尝试和失败:

var data=[]; 
var ds = { ID:0, Name:"", City:"",Comments:""}; 

for (var i = 0; i < input.length; ++i) { 
     ds.ID = input[i].ID; 
     ds.Name = input[i].Name; 
     ds.City = input[i].City; 
     ds.Comments = input[i].Comments; 
     data.push(ds); 
} 
+2

JavaScript是动态类型的,您不能定义类型。您可以即时创建对象并添加它们。我建议阅读:[MDC - 使用对象](https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Objects)。 – 2011-04-27 18:34:39

+0

关于你的更新:你需要一个构造函数或者在循环中动态生成'ds'对象。目前,循环始终引用** same **对象('ds'),即数组中的每个元素都将引用同一个对象。 – 2011-04-27 18:44:28

+0

解释了原因。谢谢 – Kiran 2011-04-27 20:33:33

回答

0

值得指出你不需要创建一个类/构造,您只需为每个条目添加一个新对象

for (var i = 0; i < input.length; ++i) { 
     var ds = new Object(); // var ds = {} is equivalent 
     ds.ID = input[i].ID; 
     ds.Name = input[i].Name; 
     ds.City = input[i].City; 
     ds.Comments = input[i].Comments; 
     data.push(ds); 
} 
0

尝试做这样的,定义你的模型对象:

DataModel = function(id, name, city, comments) { 
    this.id = id; 
    this.name = name; 
    this.city = city; 
    this.comments = comments; 
} 

然后像这样使用它:

var myarr = [new DataModel(1, 'foo', 'Toronto', 'This is a comment'), 
      new DataModel(2, 'bar', 'Vancouver', 'This is a comment again!')]; 

如果你想验证类型,扩展这样的定义:

DataModel = function(id, name, city, comments) { 
    if (id instanceof Number && name instanceof String && city instanceof String && comments instanceof String) { 
    this.id = id; 
    this.name = name; 
    this.city = city; 
    this.comments = comments; 
    } else { 
    throw new Error('DataModel parameters did not validate.'); 
    } 
} 

在回答您的编辑,这样使用它:

for (var i = 0; i < input.length; ++i) { 
    var d = new DataModel(input[i].ID, input[i].Name, input[i].City, input[i].Comments; 
    data.push(d); 
} 
0

你可以创建一个简单的对象构造:

var Data = function(id, name, city, comments) { 
    this.id = id; 
    this.name = name; 
    this.city = city; 
    this.comments = comments; 
}; 

var myarr = [ 
    new Data(1, 'foo', 'bar', 'baz'), 
    ... etc ... 
]; 

请给对象比数据更好的名字虽然:)

作为一个简单的替代,你可以简单地这样做:

var myarr = [ 
    { id: 1, name: 'foo', city: 'bar', comments: 'baz' }, 
    { id: 2, name: 'foo', city: 'bar', comments: 'baz' }, 
    ... etc ... 
]; 
0

也许是这样的:

var myarr = [] 
var ds = { ID:1,name:"boston",city:"boston",comments:"warm today"}; 
for(var i = 0; i < 5; i++){ 
    myarr.push(ds); 
} 
+0

我认为我在做类似的事情(上面的代码)。但是当我将这个myarr传递给另一个函数并访问变量时,它将它们视为未定义的。 (var j = 0; i Kiran 2011-04-27 18:42:34