Javascript返回对象数组

roi*_*idy 1 javascript arrays return function object

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;
Run Code Online (Sandbox Code Playgroud)

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

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

 [
   {
     firstname: "Bill",
     lastname: "Smith"
   },
   {
     firstname: "Bill",
     lastname: "Smith"
   }
 ]
Run Code Online (Sandbox Code Playgroud)

Rob*_*Kee 5

您不能重复使用name来推送"第二个"对象,因为您还没有创建第二个对象,它是同一个对象.所以name.firstname ="Bill"正在改变第一个没有创建第二个对象的对象.

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"
Run Code Online (Sandbox Code Playgroud)


Nik*_*wal 5

您的代码有两个问题。

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

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

您需要将代码更新为以下

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);
Run Code Online (Sandbox Code Playgroud)

  • 不知道downvoters 的问题是什么。这是一个合理的答案。 (2认同)