Почему моя функция линейного поиска в javaScript работает не правильно?
вы прерываете цикл поиска через 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;
};
ваша функция перестанет работать после первого же несовпаденияif (lastName === contacts[i].lastName){
        printPerson(contacts[i]);
        break;
        } else {
            console.log("no matches");
            break;
        }
Если lastName не будет равно lastName из контактов, то сразу цикл обрывается, а ведь может совпадение будет дальше в цикле.