Почему такой код не работает? Логика - сначало проверить на отсутствие свойства с именем атрибута 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));