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)
您不能重复使用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)
您的代码有两个问题。
要在控制台中绘画,您需要使用console.log(temp[0].firstname)代替print
您有一个名称对象并且您只是在更新它。并且当对象通过引用传递时,索引 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)