return не работает?

Есть список объектов и функция, которая проверяет наличие определенного объекта по имени, а также некоторое свойство в объекте.. Вопрос - почему при вызове функции lookUpProfile("Kristian", "lastName") не возвращается "No such contact"? Ведь по идее это должно произойти на первом же объекте, так как там нет имени Kristian.

const contacts = [
  {
    firstName: "Akira",
    lastName: "Laine",
    number: "0543236543",
    likes: ["Pizza", "Coding", "Brownie Points"],
  },
  {
    firstName: "Harry",
    lastName: "Potter",
    number: "0994372684",
    likes: ["Hogwarts", "Magic", "Hagrid"],
  },
  {
    firstName: "Sherlock",
    lastName: "Holmes",
    number: "0487345643",
    likes: ["Intriguing Cases", "Violin"],
  },
  {
    firstName: "Kristian",
    lastName: "Vos",
    number: "unknown",
    likes: ["JavaScript", "Gaming", "Foxes"],
  },
];

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

  console.log(lookUpProfile("Kristian", "lastName"));


Ответы (1 шт):

Автор решения: CrazyElf

Если правильно поставить табуляции, то станет ясно, что третий if находится за пределами цикла:

function lookUpProfile(name, prop) {
  for (var i = 0; i < contacts.length; i++) {
    if (contacts[i].firstName == name && contacts[i].hasOwnProperty(prop)) {
      return contacts[i][prop];
    }
    if (contacts[i].firstName == name && !contacts[i].hasOwnProperty(prop)) {
      return "No such property";
    }
  }
  // тут цикл уже кончился!
  if (contacts[i].firstName != name) {
    return "No such contact";
  }
}

Вообще не очень понятно, что в данном случае будет в i (цикл то кончился и его переменная i тут уже не видна), и если в области видимости нет такой переменной, то последний if даст ошибку, если до него дойдёт ход.

→ Ссылка