如何将值添加到空数组?我尝试过以下但是没有用:
var student = [{}];
for (var i = 0; i < 5; i++) {
student[i].name = i;
student[i].id = "1";
student.push(student[i]);
}
var a = JSON.stringify(student);
alert(a);
它输出6次重复的最后一次值而不是5次:
'[{"name":4,"id":"1"},{"name":4,"id":"1"},{"name":4,"id":"1"},{"name":4,"id":"1"},{"name":4,"id":"1"},{"name":4,"id":"1"}]'
答案 0 :(得分:1)
var student = [{}];
这会创建一个包含一个空对象的javascript数组
student[i].name = i;
student[i].id = "1";
对于i = 0
,这会改变该空对象。
student.push(student[i]);
然后将更改的对象推送到已存在的数组中。现在,数组中有两个相同的值。
首次推后两件事。这重复了五次。
推送项目会将其添加到数组中。推送已经在数组中的元素通常没有意义。创建一个新对象并推送它。不必使用要修改的空对象预先填充数组。
var student = [];
for (var i = 0; i < 5; i++) {
student.push({
name: i,
id: '1'
});
}
答案 1 :(得分:1)
在原始代码中,您将对象设置为student [i]的值,然后再将其再次推送到数组上,然后重新设置这些值。
每次都需要推送一个新对象:
var student = [];
for (var i = 0; i < 5; i++) {
student.push({
id: i,
name: i
});
}
var a = JSON.stringify(student);
alert(a);
答案 2 :(得分:0)
您对列表和新对象使用相同的名称。当您将列表名称更改为学生时,您的问题将得到解决。解决方案如下:
var students = [{}];
for (var i = 0; i < 5; i++) {
student = {}
student.name = i;
student.id = "1";
students.push(student);
}
var a = JSON.stringify(students);
alert(a);
答案 3 :(得分:0)
尝试;
var students = [];
for (var i = 0; i < 5; i++) {
student = {}
student.name = i;
student.id = "1";
students.push(student);
}
var a = JSON.stringify(students);
alert(a);
答案 4 :(得分:0)
你的数组不是空的。它已经包含一个对象。如果我们将对象放在一个额外的变量中并省略循环,那么问题就更容易看出了:
var student = [];
var obj = {};
obj.name = 1;
student.push(obj);
obj.name = 2;
student.push(obj)
问题是:我们在这里创建了多少个对象?答案是一个,即var obj = {};
。然后,我们向对象添加一些属性(name
)并将其添加到数组(student.push(obj)
)。
接下来的内容至关重要:我们更改对象的现有属性并为其指定不同的值。然后我们将对象再次添加到数组 。即使student
包含两个元素,但它们引用相同的值(可以使用student[0] === student[1]
轻松验证)。
如果要创建不同对象的数组,则必须创建这些对象。在我们的例子中,这将是:
var student = [];
var obj = {};
obj.name = 1;
student.push(obj);
obj = {}; // <- create a new object
obj.name = 2;
student.push(obj)
对于你的代码,这意味着你必须在循环的每次迭代中创建一个新对象,而不仅仅是在它之外的一个。
阅读有关数组和对象的资料:
答案 5 :(得分:0)
由于你正在推送对象,它的引用每次都会改变为当前值,所以最后它将输出显示为最后一个值。
试试这个
var student = [{}];
for (var i = 0; i < 5; i++) {
var obj = new Object();
obj.name = i;
obj.id = "1";
student.push(students);
}
var a = JSON.stringify(student);
alert(a);