Javascript创建一个对象数组

时间:2012-02-14 23:12:59

标签: javascript arrays javascript-objects

我是Javascript的新手。任何有关以下问题的帮助或建议都非常感谢。

我想创建一个inturns包含对象列表的数组。鉴于以下代码总结了我的问题

{
    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”。

我知道最后一个值会覆盖符号对象,但无论如何我都可以获取存储的所有值。

先谢谢

2 个答案:

答案 0 :(得分:4)

这是因为数组InstrumentArray中的每个元素都是对同一个对象Instrument的引用,并且您不断更改该对象的属性。您的代码中有许多需要改进的地方,但简短的回答是在循环中创建Instrument

答案 1 :(得分:1)

在您的代码中:

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

虽然在使用new调用构造函数时可以省略形式参数列表,但这不是一个好主意,因为它可能被误解为Array的赋值而不是Array的新实例。在任何情况下,数组文字可能是更好的选择(明确,更少键入):

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;

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