Javascript返回对象数组

时间:2016-01-19 20:31:48

标签: javascript arrays function object return

function setup() {
  var names = [];
  var name = {firstname: "", lastname: ""};

  name.firstname = "John";
  name.lastname = "Doe";
  names.push(name);

  name.firstname = "Bill";
  name.lastname = "Smith";
  names.push(name);

  return names;
}

var temp = setup();
print temp[0].firstname;

我似乎无法弄清楚如何从函数中返回一个对象数组。我知道哪里出错了?

问题是存储在temp中的结果如下:

 [
   {
     firstname: "Bill",
     lastname: "Smith"
   },
   {
     firstname: "Bill",
     lastname: "Smith"
   }
 ]

2 个答案:

答案 0 :(得分:5)

您无法重复使用名称来推送"第二个"对象,因为您还没有创建第二个对象,它是同一个对象。所以name.firstname ="比尔"正在改变第一个没有创建第二个对象的对象。



function setup() {
  var names = [];

  var name = {};
  name.firstname = "John";
  name.lastname = "Doe";
  names.push(name);

  var name2 = {};
  name2.firstname = "Bill";
  name2.lastname = "Smith";
  names.push(name2);

  return names;
}

var temp = setup();
alert(temp[0].firstname); // Alerts "John"




答案 1 :(得分:4)

您的代码有两个问题。

  1. 要在控制台中绘画,您需要使用console.log(temp[0].firstname)代替print

  2. 您有一个名称对象,而您只是在更新它。当对象通过引用传递时,索引0和索引1处的实例都会更新并具有相同的值。

  3. 您需要将代码更新为以下

    function setup() {
          var names = [];
          var n1 = {};
        
          n1.firstname = "John";
          n1.lastname = "Doe";
          names.push(n1);
        
          var n2 = {};
          n2.firstname = "Bill";
          n2.lastname = "Smith";
          names.push(n2);
        
          return names;
        }
        
        var temp = setup();
        console.log(temp[0].firstname);