If-else внутри цикла for не работает - Javascript - PullRequest
0 голосов
/ 07 июля 2019

У меня есть массив «контактов» с несколькими свойствами.Моя функция использует for, чтобы проверить, соответствует ли свойство firstName каждого контакта параметру name моей функции, если это так, она проверяет, имеет ли такой контакт свойство, соответствующее параметру prop (if внутри предыдущего if).Оба слова «if» имеют соответствующие слова «elses»: «нет такого свойства», «не такой контакт».

Код на самом деле очень прост:

var contacts = [
  {
    "firstName": "Akira",
    "lastName": "Laine",
    "number": "0543236543",
    "likes": ["Pizza", "Coding", "Brownie Points"]
  },
  {
    "firstName": "Harry",
    "lastName": "Potter",
    "number": "0994372684",
    "likes": ["Hogwarts", "Magic", "Hagrid"]
  },
  {
    "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) {

      if (contacts[i].hasOwnProperty(prop)) {
        return contacts[i][prop];
      }
      else {
        return "No such property";
      }
    }
    else {
      return "No such contact";}
  }  
}

console.log(lookUpProfile("Harry", "likes"));

Идеально работают следующие строки:

console.log(lookUpProfile("Akira", "likes"));
console.log(lookUpProfile("Akira", "lala"));

Теперь, если я добавлю другие firsNames для остальных элементов:

console.log(lookUpProfile("Harry", "likes"));
console.log(lookUpProfile("Kristian", "likes"));

, он выдаст «Нет такого контакта» ....: /

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Это потому, что вы возвращаете No such contact в первой итерации цикла.Поместите это в конец вашей функции после цикла как универсальный.

var contacts=[{"firstName":"Akira","lastName":"Laine","number":"0543236543","likes":["Pizza","Coding","Brownie Points"]},{"firstName":"Harry","lastName":"Potter","number":"0994372684","likes":["Hogwarts","Magic","Hagrid"]},{"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) {

      if (contacts[i].hasOwnProperty(prop)) {
        return contacts[i][prop];
      } else {
        return "No such property";
      }
    }
  }
  return "No such contact";
}

console.log(lookUpProfile("Harry", "likes"));
console.log(lookUpProfile("Kristian", "likes"));
console.log(lookUpProfile("Made Up Person", "likes"));
console.log(lookUpProfile("Akira", "Made Up Property"));
0 голосов
/ 07 июля 2019

В вашем текущем коде, если первый элемент массива не совпадает с текущим переданным именем, чем он идет в блок else и возвращает «Нет такого контакта» (в конечном итоге просто проверяется только первый элемент)

You 'Вы ошибочно возвращаетесь из блока else в цикл for, вам нужно вывести его из цикла

var contacts = var contacts=[{"firstName":"Akira","lastName":"Laine","number":"0543236543","likes":["Pizza","Coding","Brownie Points"]},{"firstName":"Harry","lastName":"Potter","number":"0994372684","likes":["Hogwarts","Magic","Hagrid"]},{"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) {
      if (contacts[i].hasOwnProperty(prop)) {
        return contacts[i][prop];
      } else {
        return "No such property";
      }
    }
  }
  return "No such contact";
}

console.log(lookUpProfile("Harry", "likes"));
...