将对象添加到现有对象数组 - JavaScript

时间:2015-09-15 07:22:59

标签: javascript javascript-objects dynamic-arrays

我创建了一个包含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();

3 个答案:

答案 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]);
    }
}

并查看是否可以发现错误...

希望这有帮助。