Почему такой код не работает? Логика - сначало про

Почему такой код не работает? Логика - сначало проверить на отсутствие свойства с именем атрибута name. Если иначе - выполняется else if (изначально я вообще хотел там написать просто contacts[i].hasOwnProperty(prop) без && и проверки на наличие свайства с именем атрибута name). В этом коде почему-то работает только return "No such contact" и return "No such property".

function lookUpProfile(name, prop) {
 for (let i = 0; i < contacts.length; i++) {
 if (contacts[i].firstName != name) {
 return "No such contact";
        } else if (contacts[i].firstName == name && contacts[i].hasOwnProperty(prop)) {
 return contacts[i][prop];
        }
 else return "No such property";
        }
    }

И еще хотел спросить: Так что в итоге находиться тут в переменной item: const item = contacts.find(n => n.firstName === name)? И что подставляется в переменную n? В n - gоочередно каждый объект массива contacts (которых по сути 4)? А item - становится найденным объектом (то есть при name "Akira" как я понял - это будет первый объект нашей базы данных, которая в массиве)? И уже там, внутри первого объекта, который занял переменную item мы начинаем искать prop далее через if'ы? И если это так, то как сделать аналогичную вещь, которая бы искала значение во внутренних массивах? Например если бы name было массивом, то как сделать такой find? const item = contacts.find(n => n.likes === name) - Так что ли?

Вот что я имею ввиду. Но почему-то это не работает.

let x = ["Pizza", "Coding", "Brownie Points"];

function lookUpProfile(name) {
 var contact = contacts.find(item => item.likes == name);
 if (contact) {
 return contact;
    }
 return "Dont work";
}
console.log(lookUpProfile(x));

А это работает:

let x = "Akira";

function lookUpProfile(name) {
 var contact = contacts.find(item => item.firstName == name);
 if (contact) {
 return contact;
    }
 return "Dont work";
}
console.log(lookUpProfile(x));