JavaScript - 不添加到数组的对象

时间:2015-04-14 01:24:07

标签: javascript arrays object

(仅供参考:再次感谢帮助新手尝试自学)。

我试图重新创建一个从会话存储中解析出来的数组。

var entries = JSON.parse(sessionStorage.getItem('entries'));
console.log(entries);
var stDrivArray = JSON.parse(sessionStorage.getItem('entrynames')); //retrieve from storage
var stDrivArray2 = $.makeArray(stDrivArray); //turn into an array, but gives each entry in the array the name "object". They need to become "Driver"

//this is the attempt to make them become Drivers
for(var i=0; i<stDrivArray2.length; i++){
    console.log(stDrivArray2[i]);
    var draw2=stDrivArray2[i].draw;
    var name2=stDrivArray2[i].name;
    var name3 = "."+"driver"+stDrivArray2[i].draw;
    Driver[name3] = new Driver(draw2, name2);
    console.log(Driver[name3]);
    //DrivArray.push(Driver[name3]);
    DrivArray[DrivArray.length]=Driver[name3];
};
console.log(DrivArray);

一个有趣的问题:当我将Driver[name3]打印到控制台时,它会正确打印。例如:

Driver {draw: "5", name: "David Dubczak"}

我试图将每个对象添加到DrivArray,但是当我打印出DrivArray之后,这就是打印出来的内容:

0: Driver
     draw: undefined
     name: undefined

但是,它会为脚本中的每个驱动程序打印一个对象!它的价值是未定义的。这看起来很奇怪,因为对象是正确创建的,但由于某种原因,值没有正确添加到数组中的键(我希望我使用正确的词汇表)。

特别奇怪,因为我使用完全相同的技术将相同的对象添加到上一页的同一个数组中(因此需要存储和从会话存储中检索)并且它是&#39工作得很好。

思想?

再次感谢。

2 个答案:

答案 0 :(得分:0)

我真的不知道你期望name3有什么部分

但替换

Driver[name3] = new Driver(draw2, name2);
console.log(Driver[name3]);
//DrivArray.push(Driver[name3]);
DrivArray[DrivArray.length]=Driver[name3]

DrivArray[DrivArray.length]= new Driver(draw2, name2);

它应该有效

答案 1 :(得分:0)

这是我提出的解决方案。数组现在正确打印到控制台。

    for(var i=0; i<stDrivArray2.length; i++){
    console.log(stDrivArray2[i]);
    var draw2=stDrivArray2[i].draw;
    var name2=stDrivArray2[i].name;
    var name3 = "."+"driver"+stDrivArray2[i].draw;
    Driver[name3] = new Driver(draw2, name2, 0, 0);
    console.log(Driver[name3]);
    //DrivArray.push(Driver[name3]);
    DrivArray[DrivArray.length]=Driver[name3];
    //DrivArray[] = new Driver(Draw3, name2);
};
console.log(DrivArray);

此外,我又向对象添加了两个值,因此对象现在是:

function Driver(draw, name, points, order) {
this.draw = draw;
this.name = name;
this.points = points;
this.order = order;

}