2012-02-14 187 views
0

我对Javascript很陌生。任何有关下面的问题的帮助或建议,高度赞赏。Javascript创建一个对象数组

我想创建一个数组,其中包含对象列表。考虑下面的代码总结我的问题

{ 
    var Instrument = {}; 
    var InstrumentArray = new Array; 
    var array = new Array; 
    array[0] ="XYZ0"; 
    array[1] ="XYZ1"; 
    . 
    . 
    . 
    array[n] ="XYZn" ; 
    data1['Name'] = "X"; 
    data1['TypeString'] = "WatchList"; 
    data1['FileTypeString'] = "XLS"; 
    for (var i = 0; i < array.length; i++) { 

     Instrument['Symbol'] = array[i]; 
     InstrumentArray.push(Instrument); 
    } 
    for(var j =0; j< InstrumentArray.length;j++) 
    { 
     console.log(InstrumentArray[j]); 
    } 

    } 

当我通过CONSOLE.LOG它显示我正确的数值,但 符号看看输出:它显示的值是我在这种情况下,已经进入最后一个“XYZn”。

我知道最后一个值会覆盖符号对象,但是他们可以通过任何方式获得所有存储的值。

由于提前

+0

在哪里声明了'data1'? – ggreiner 2012-02-14 23:15:49

回答

4

这是因为数组InstrumentArray中的每个元素是相同的对象Instrument的引用,你不断改变一个对象的属性。代码中有很多事情需要改进,但最简单的答案是在循环中创建Instrument

+0

所以我应该如何解决它,我的意思是我需要像这样的对象{Symbol =“XYZ0”}对象{Symbol =“XYZ1”} ...... – 2012-02-14 23:18:23

+0

具体来说,移动'var Instrument = { };'这样它就是循环中的第一行。或者干脆'InstrumentArray.push({Symbol:array [i]})'。在一般的Javascript编程方面,我会阅读一个很好的指导,例如http://eloquentjavascript.net/ – YXD 2012-02-14 23:20:15

+0

谢谢我得到你 – 2012-02-14 23:22:09

1

在您的代码:

var Instrument = {}; 
var InstrumentArray = new Array; 

虽然可以调用带有new构造时,可以省略形式参数列表中,这不是一个好主意,因为它可能被误解为阵的分配,而不是新数组的实例。在任何情况下,文字的阵列可能是一个更好的选择(无歧义,以下键入):

var InstrumentArray = []; 

同样为:

var array = ["XYZ0", "XYZ1", ... "XYZn"] 

在下面:

data1['Name'] = "X"; 
data1['TypeString'] = "WatchList"; 
data1['FileTypeString'] = "XLS"; 

data1具有没有被声明或初始化,大概它是一个对象(不要混合单引号和双引号,除非它们是嵌套的,它会使代码混淆),所以文字可能更好(与上述相同的原因):

var data1 = {'Name': 'X', 'TypeString': 'WatchList', 'FileTypeString': 'XLS'}; 

这也是少得多的类型。

for (var i = 0; i < array.length; i++) { 
     Instrument['Symbol'] = array[i]; 
     InstrumentArray.push(Instrument); 
} 

其他人告诉你这里发生了什么,可能不是你想要的。请注意,这里的属性名称遵守rues有效标识符,点号都可以使用(这是一个更方便一点):

 Instrument.Symbol = array[i]; 

此外,由于您使用的是计数器添加成员为空数组,你也可以这样做:

 InstrumentArray[i] = Instrument; 

但他们当然不会解决你的问题,他们只是不同做同样的事情的方式(更好?)。

+0

感谢您的输入,这绝对有助于编写有意义的js – 2012-02-16 00:42:41

相关问题