向数组添加值

时间:2013-08-16 06:47:48

标签: javascript

如何将值添加到空数组?我尝试过以下但是没有用:

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"}]'

6 个答案:

答案 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);