如何调用由函数创建的对象,现在是在数组中?

时间:2015-12-17 00:46:54

标签: javascript arrays function object javascript-objects

这是我在这里的第一个问题,所以要好一点:D

我正在构建一个基本的短信网络应用程序,我完全卡住了。我有一个函数创建一个具有“name”和“number”值的对象,用于新的联系人。然后将该对象推入我的“联系人”数组中。这一切看起来像这样:

var contacts = [];
$("#add-contact").click(function () {
    var newName = $("#new-name").val();
    function contactName(name, number) {
        this.name = name;
        this.number = number;
    }
    var newNumber = $("#new-number").val();
    var newPerson = new contactName(newName, newNumber);
    contacts.push(newPerson);
    console.log(contacts)

然后我应该能够使用该信息,然后输入联系人姓名,有一个功能搜索我的“联系人”数组,给我索引,然后使用索引来调用名称和号码,这样我就可以发送消息并将其全部显示正确(未显示)。我的呼叫功能如下:

$("#send-button").click(function () {
    var userNumber = $("#number-input").val();
    var userIndexNumber = contacts.indexOf(userNumber);
    appendToConvo(contacts[userIndexNumber]);
    });

“appendToConvo”就是这样,我可以看到我是否输出了正确的信息。

当我在Chrome中运行第一个功能时,控制台显示我的“contacts”数组仅包含[contactname]。我想这个函数是添加名称和数字的数据,而不是数组的对象名称。 Chrome显示如下: Chrome console message 这让我疯狂了一点,我只需要一些帮助!感谢任何可以帮助我的人!!!

1 个答案:

答案 0 :(得分:1)

contacts是一个contactName对象数组,而不是数字数组,因此contacts.indexOf(userNumber)返回-1(indexOf使用严格相等来比较传递参数的元素,并且数组中没有任何对象是严格的等于userNumber)。我建议您使用以下内容找到您感兴趣的联系人:

var matchingContacts = $.grep(contacts, function (c) {
  return c.number === user.number;
});
appendToConvo(matchingContacts[0]);