-1

如何将值添加到空数组?我尝试了以下方法,但它不起作用:

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

6 回答 6

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'
    });
} 
于 2013-08-16T06:53:27.803 回答
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);
于 2013-08-16T06:53:54.033 回答
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);
于 2013-08-16T07:13:32.117 回答
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);
于 2013-08-16T06:52:51.893 回答
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);
于 2013-08-16T06:56:40.497 回答
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)

对于您的代码,这意味着您必须在循环的每次迭代中创建一个新对象,而不仅仅是在它之外创建一个。


阅读有关数组和对象的材料:

于 2013-08-16T07:02:00.397 回答