搜索不返回所需结果的对象数组

时间:2014-08-09 22:48:04

标签: javascript arrays function javascript-objects

我正在处理我的一个项目,我的联系人列表contactsarray,其中包含objects

问题是我的函数searchPerson总是返回搜索到的不存在的人的条件的响应。 一旦我删除条件并再次调用该函数,它就会返回搜索到的内容。

我不明白为什么当条件存在于联系人列表中时,它总是返回no such person found!的条件!任何人都可以帮助我理解为什么会这样吗?

这是我的代码。

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"
};

//Here we populate ou array.
var contacts = [bob, mary];

function printPerson(person) {
    console.log(person.firstName + " " + person.lastName);
}


function searchPerson (lastName) {
    var contactsLength = contacts.length;
    for(var i = 0; i < contactsLength; i++){
      //set a condition that we only retrieve the last name if it already exists in out contact list
        if(lastName !== contacts[i].lastName){
            return console.log("No such person found!");
        } else {
            printPerson(contacts[i]);
        }
    }
}

2 个答案:

答案 0 :(得分:2)

您正在枚举整个数组,但返回&#34;找不到这样的人&#34;只要找到任何不匹配的人。由于这两个姓氏不一样,您 总是触发return行。

请考虑使用Array.prototype.filter来查找匹配的条目:

function searchPerson(lastName) {
    var matches = contacts.filter(function(contact) {
        return contact.lastName === lastName;
    });

    if (matches.length) {
        matches.forEach(printPerson);
    } else {
        console.log("No such person found!");
    }
}

注意:.filter.forEach是ES5功能(IE9 +仅AFAICR)。如果需要,请使用"shim"将其添加到您的浏览器中。

答案 1 :(得分:0)

您需要修复逻辑,以便为找到的每个匹配项打印名称。如果未找到匹配项,则返回错误。

function searchPerson (lastName) {
    var contactsLength = contacts.length;

    // Remember if a match is found
    var matchFound = false;

    for (var i = 0; i < contactsLength; i++) {

        // Print each match
        if (lastName == contacts[i].lastName) {
            printPerson(contacts[i]);
            matchFound = true;
        }
    }

    // If no match found, return error message
    if (!matchFound) {
        console.log('Person ' + lastName + ' not found!');
    }
}