【问题标题】:Javascript Creating an Array of ObjectsJavascript 创建对象数组
【发布时间】:2012-03-06 08:04:45
【问题描述】:

我对 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 查看输出时,它会显示正确的值数量,但 Symbol: 它显示的值是我在本例中输入的最后一个值“XYZn”。

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

提前致谢

【问题讨论】:

    标签: javascript arrays javascript-objects


    【解决方案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);
     }
    

    其他人告诉你这里发生了什么,可能不是你想要的。请注意,如果属性名称符合有效标识符的规则,则可以使用点表示法(这更方便一些):

          Instrument.Symbol = array[i];
    

    此外,由于您使用计数器将成员添加到空数组,您还可以这样做:

          InstrumentArray[i] = Instrument;
    

    但它们当然不会解决您的问题,它们只是做同一件事的不同(更好?)方式。

    【讨论】:

    • 感谢您的输入,这绝对有助于编写有意义的 js
    【解决方案2】:

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

    【讨论】:

    • 那么我应该如何解决它,我的意思是我需要这样的东西 Object { Symbol="XYZ0"} Object { Symbol="XYZ1"} ......
    • 具体来说,移动var Instrument = {}; 行,使其成为循环中的第一行。或者干脆做InstrumentArray.push({Symbol : array[i]})。在一般的 Javascript 编程方面,我会阅读一个很好的指南,例如 eloquentjavascript.net
    猜你喜欢
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多