【问题标题】:Add values to an array将值添加到数组
【发布时间】:2013-08-16 15:13:32
【问题描述】:

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

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

【问题讨论】:

标签: javascript


【解决方案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'
    });
} 

【讨论】:

    【解决方案2】:

    在您的原始代码中,您将对象设置为 student[i] 的值,然后将其再次推送到数组中,然后重新设置这些值。

    每次都需要推送一个新对象:

    var student = [];
    for (var i = 0; i < 5; i++) {
        student.push({
            id: i,
            name: i
        });
    }
    
    var a = JSON.stringify(student);
    alert(a);
    

    【讨论】:

      【解决方案3】:

      您对列表和新对象使用相同的名称。当您将列表名称更改为学生时,您的问题就解决了。解决方法如下:

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

      【讨论】:

      • student 此处未定义。
      【解决方案4】:

      试试;

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

      【讨论】:

        【解决方案5】:

        您的数组不为空。它已经包含一个对象。如果我们将对象放在一个额外的变量中并省略循环,也许问题更容易看出:

        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)
        

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


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

        【讨论】:

          【解决方案6】:

          由于您正在推送对象,它的引用每次都会更改为当前值,因此最后它将输出显示为最后一个值。

          试试这个

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-24
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-13
            • 1970-01-01
            • 2016-03-28
            • 2015-05-25
            相关资源
            最近更新 更多