我创建了一个包含2个对象的数组,我希望写一个' add'函数可以动态地向这个数组添加更多人。
你能解释一下为什么要添加'以下功能不会将对象添加到'联系人'数组成功。
var bob = {
firstName: "Bob",
lastName: "Jones",
phoneNumber: "(650) 777-7777",
email: "bob.jones@example.com"
};
var mary = {
firstName: "Mary",
lastName: "Johnson",
phoneNumber: "(650) 888-8888",
email: "mary.johnson@example.com"
};
var contacts = [bob, mary];
var contactsLength = contacts.length;
function add (firstName, lastName, phoneNumber, email) {
contacts[contactsLength] = {
firstName: firstName,
lastName: lastName,
phoneNumber: phoneNumber,
email: email
};
};
function printPerson(person) {
console.log(person.firstName + " " + person.lastName);
}
function list() {
for (var i = 0; i < contactsLength; i++) {
printPerson(contacts[i]);
}
}
add("MJ", "Foster", "MJ@gmail", "714-333-5555");
list();
答案 0 :(得分:1)
尝试使用推送方法
int
答案 1 :(得分:1)
你的代码没有按照你认为应该的方式工作的原因是因为这一行:
var contactsLength = contacts.length;
此处,您将contacts.length
的值分配给变量contactsLength
,但此后,即使contactsLength
数组的大小发生更改,contacts
也不会更改
相反,您应该简单地引用属性contacts.length
。
以下是您的代码的更正版本:
var bob = {
firstName: "Bob",
lastName: "Jones",
phoneNumber: "(650) 777-7777",
email: "bob.jones@example.com"
};
var mary = {
firstName: "Mary",
lastName: "Johnson",
phoneNumber: "(650) 888-8888",
email: "mary.johnson@example.com"
};
var contacts = [bob, mary];
function add (firstName, lastName, phoneNumber, email) {
contacts[contacts.length] = {
firstName: firstName,
lastName: lastName,
phoneNumber: phoneNumber,
email: email
};
};
function printPerson(person) {
console.log(person.firstName + " " + person.lastName);
}
function list() {
for (var i = 0; i < contacts.length; i++) {
printPerson(contacts[i]);
}
}
add("MJ", "Foster", "MJ@gmail", "714-333-5555");
list();
请注意:使用原生数组方法push()
,与contacts[contacts.length] = {...}
完全相同。
答案 2 :(得分:0)
您的添加功能正常,但更好的方法是根据@MysterX使用 push()方法,因为保持跟踪数组索引可能不会 总是证明非常可靠,特别是如果你使用公共变量来跟踪它。 push()方法
您的错误出现在 printPerson 功能中。仔细查看 for 循环并将其更改为此
function list() {
for (var i = 0; i <= contactsLength; i++) {
printPerson(contacts[i]);
}
}
并查看是否可以发现错误...
希望这有帮助。