@frontendthug

Как вывести нужную информацию?

//Setup
var 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 lookUp(firstName, prop){
// Only change code below this line
  for(var i = 0; i < contacts.length; i++) {
    if( contacts[i].firstName === firstName && contacts[i].hasOwnProperty(prop) ) {
      return contacts[i][prop];
    } else if( contacts[i].firstName !== firstName ) {
      return "No such contact";
    } else if( !contacts[i].hasOwnProperty(prop) ) {
      return "No such property";
    }
  }
// Only change code above this line
}

// Change these values to test your function
lookUp("Harry", "likes");


В этом примере код выводит "No such contact" вместо значения ключа.
Целый день бьюсь над этой задачей, никак не могу сделать правильно...
  • Вопрос задан
  • 189 просмотров
Решения вопроса 2
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
Ваш код обрывается на первой же итерации, если правильно понял логику, то надо так:
function lookUp(firstName, prop){
  for(var i = 0; i < contacts.length; i++) {
    if(contacts[i].firstName === firstName) {
      if(!contacts[i].hasOwnProperty(prop)) {
         return "No such property";
      }
      return contacts[i][prop];
    }
  }
  return "No such contact";
}
Ответ написан
Комментировать
nalomenko
@nalomenko
Руководитель отдела разработок в студии «Lava»
Ну, дело в том, что у Вас дело до ходит только до первого элемента массива contacts, и в любом случае на первом же элементе происходит return чего-либо (в данном случае "No such contact").

Можно переписать функцию lookUp, например, таким образом:

function lookUp(firstName, prop) {
  var contactExists = false;
  for(var i = 0; i < contacts.length; i++)
  {
    contactExists |= (contacts[i].firstName === firstName);
    if(contactExists && contacts[i].hasOwnProperty(prop))
      return contacts[i][prop];
  }
  return contactExists ? "No such property" : "No such contact";
}

// Change these values to test your function
console.log(lookUp("Harry", "likes"));


Данный код (используя данные из вопроса), выводит [ 'Hogwarts', 'Magic', 'Hagrid' ]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы