我正在处理我的一个项目,我的联系人列表contacts
是array
,其中包含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]);
}
}
}
答案 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!');
}
}