Почему моя функция линейного поиска в javaScript работает не правильно?

Изучаю JavaScript в CodeCademy. Надо было выполнить задание по написанию адресной книги.
2 объекта: "bob" и "mary" сохранены в массив contacts. Функция printPerson выводит в консоль Имя+Фамилию объекта. Функция list(); - отображает всё содержимое массива. Функция линейного поиска search выводит printPerson найденного объекта. Функция add добавляет объект в массив.
Поиск почему-то не находит те объекты, которые были заданы функцией add. Хотя через функцию list всё отображается корректно... Что не так?((
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 printPerson(person) {
    console.log(person.firstName + " " + person.lastName);
}

function list() {
	var contactsLength = contacts.length;
	for (var i = 0; i < contactsLength; i++) {
		printPerson(contacts[i]);
	}
}

/*Create a search function
then call it passing "Jones"*/
var search = function(lastName){
    for(i=0;i<contacts.length;i++){
        if (lastName === contacts[i].lastName){
        printPerson(contacts[i]);
        break;
        } else {
            console.log("no matches");
            break;
        }
    }
};
var add = function(firstName,lastName,phoneNumber,email){
    contacts[contacts.length] = {
        firstName: firstName,
        lastName: lastName,
        phoneNumber: phoneNumber,
        email: email
        };
    
    };

add("Evs","Evsign","8234234234","evsign@live.ru");
list();
search("Evsign");
console.log(contacts[2]);


1c1d73bbbb0d1c473ee462b2919028c013ece4ac
  • Вопрос задан
  • 2528 просмотров
Решения вопроса 2
@Yago
вы прерываете цикл поиска через break - у вас получается одна итерация, вместо полного обхода массива

var search = function(lastName){
    for(i=0;i<contacts.length;i++){
        if (lastName === contacts[i].lastName){
           printPerson(contacts[i]);
           return true;           
        } 
    }
   console.log("no matches");
   return false;
};
Ответ написан
Комментировать
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
ваша функция перестанет работать после первого же несовпадения

if (lastName === contacts[i].lastName){
        printPerson(contacts[i]);
        break;
        } else {
            console.log("no matches");
            break;
        }


Если lastName не будет равно lastName из контактов, то сразу цикл обрывается, а ведь может совпадение будет дальше в цикле.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
24 апр. 2024, в 09:32
25000 руб./за проект
24 апр. 2024, в 09:27
13000 руб./за проект
24 апр. 2024, в 09:20
10000 руб./за проект