2016-08-09 5 views
1

Я нахожусь в 217-м запросе freecodecamp, который является поиском профиля.Где я ошибаюсь в этом javascript-коде?

Это определение проблемы

У нас есть массив объектов, представляющих разные люди в наших списках контактов. Функция lookUpProfile, которая принимает firstName и свойство (prop) в качестве аргументов, была предварительно написана для вас. Функция должна проверить, является ли firstName истинным именем контакта firstName, и данное свойство (prop) является свойством этого контакта. Если оба значения истинны, верните «значение» этого свойства. Если ПгвЬЫат не соответствует любым контактам затем вернуться «Нет такого контакта» Если опора не соответствует уважительным свойствам затем возвращает «Нет такое имущества»

Я видел много с помощью оператора равенства в «если» но я хотел решить его, используя функцию «hasOwnProperty». Я не знаю, где я ошибаюсь.

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

 
// Change these values to test your function 
 
lookUpProfile("Akira", "likes");

ответ

1

Вам нужно сравнить фактическое значение firstName имущества, (contacts[i].firstName == firstName).

См. Подробнее в комментариях.

Здесь работает code

// Code goes here 
 

 
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 lookUpProfile(firstName, prop){ 
 
    // Only change code below this line 
 
    for(var i=0; i<contacts.length; i++){ 
 
     // use i as array index, to access particular contact object 
 
     if((contacts[i].firstName == firstName) && contacts[i].hasOwnProperty(prop)){ 
 
      //dot notation will not work here, use [] 
 
      return contacts[i][prop]; 
 
     } 
 
     return "No such property"; 
 
    } 
 
    // Only change code above this line 
 
} 
 

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

0

вы просто забыли для поиска для объекта в массиве, а не весь массив:

for(var i=0; i<contacts.length; i++) { 

    var contact = contacts[i]; 

    if(contact.hasOwnProperty('firstName') && contact.hasOwnProperty(prop)) { 
     return contact.prop; 
    } 

    return "No such property"; 

} 
+0

благодаря забыть это один – Gatsbill

+0

это не будет работать, потому что 'firstname' передается в не является переменной –

+0

@MB да, он не работает. Любая идея о том, как это исправить? – puneeth8994

0
  1. Вы не ссылающийся на один контакт в контуре contacts[i]
  2. исправить утверждение if, чтобы сравнить его имя
  3. Вы должны получить значение свойства из переменной, как показано ниже

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 lookUpProfile(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; 
 
    alert(contacts[i][prop]); 
 
    } 
 
    //return "No such property"; 
 
    alert("No such property"); 
 
    } 
 
// Only change code above this line 
 
} 
 

 
// Change these values to test your function 
 
lookUpProfile("Akira", "likes");

0

Проблема заключается в firstNamelookUpProfile функция не является свойством. Это значение свойства firstName.

, когда мы вызываем lookUpProfile("Akira", "likes"), ваш код пытается проверить, существует ли в данных свойство «Akira» (а это не так), и оно не возвращает свойство. Вам нужно заменить contacts.hasOwnProperty(firstName) в своем заявлении, если с contacts.firstName === firstName

Кроме того, вы должны получить контакт в цикле:

var contact = contacts[i]; 
0

Приведенный выше код будет работать на один тестовый пример, но не все, что требуется, чтобы пройти сеанс.

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

Here is the solution to this problem 
 

 
function lookUpProfile(firstName, prop){ 
 
    for (var i = 0; i < contacts.length; i++) { 
 
     if (contacts[i].firstName == firstName && prop in contacts[i]) { 
 
      return contacts[i][prop]; 
 
     } else if (!(firstName in contacts[i]) && i == (contacts.length - 1)) { 
 
      return "No such contact"; 
 
     } else if ((typeof contacts[i][prop] == 'undefined')) { 
 
      return "No such property"; 
 
     } 
 
    }

Смежные вопросы