我是Javascript的新手,我似乎无法找到解释我的代码所发生的事情。
我想创建一个"人物"每个人都有一些与他们相关的信息,例如" id"和"名称"。我不知道有多少"人"我需要在我的阵列中,所以我正在使用" push"当我需要另一个人的时候我的问题是我的阵列最后填满了最后一个人的信息。
以下是我正在使用的声明:
var ppl_arr = [];
var profile = {
id: 10000,
name: " ",
};
profile.id=3;
ppl_arr.push(profile); //add this person to my array
alert(ppl_arr[0].id + "\t" + ppl_arr.length);
profile.id=5;
ppl_arr.push(profile); // push next person to the array
alert(ppl_arr[0].id+"\t"+ppl_arr[1].id + "\t"+ppl_arr.length);
第一个警报正确显示:" 3 1"
在第二个警报中,我得到了#34; 5 5 2"而不是" 3 5 2"
所以我在我的数组中输入了两个条目,但第二个条目似乎覆盖了第一个。谁能解释一下发生了什么?
答案 0 :(得分:2)
问题#1:
alert(ppl_arr[0].id + ppl_arr.length);
将显示总和,而不是连接 - 请尝试alert(ppl_arr[0].id.toString().concat(ppl_arr.length));
问题#2:
您更改现有对象的id
属性,而不是复制它。所以你也改变了数组中已经存在的对象的id。所以你需要
var ppl_arr = [];
var profile = {
id: 10000,
name: " ",
};
profile.id=3;
ppl_arr.push(profile);
//Create a new profile
var profile2 = {
id: 10000,
name: " ",
};
profile2.id=5;
ppl_arr.push(profile2);
答案 1 :(得分:2)
您只是更改同一对象的ID,并将相同的对象添加到数组两次。我建议你创建你的“人”。对象作为实例对象,类似这样
//This is a constructor function for a Person object
function Person(id,name)
{
this.Id = id;
this.Name = name;
}
然后
var ppl_arr = [];
ppl_arr.push(new Person(3,"Bob")); //add this person to my array
alert(ppl_arr[0].Id + " - " + ppl_arr.length); //outputs "3 - 1"
//NOTE put a string inbetween, because Id and length are both integers,
//you would actual get a sum of the two, not a string concatenation.
ppl_arr.push(new Person(5,"Steve")); // push next person to the array
alert(ppl_arr[0].Id+"\t"+ppl_arr[1].Id + "\t"+ppl_arr.length); // outputs 3 5 2