2016-01-15 2 views
5

Несколько минут назад я практиковал JavaScript на Codeacademy, и я нашел что-то запутанное. Вот код:Зачем нужен еще блок, даже если условие истинно?

var friends = {}; 
friends.bill = { 
    firstName: "Bill", 
    lastName: "Gates", 
    number: "(206) 555-5555", 
    address: ['One Microsoft Way','Redmond','WA','98052'] 
}; 
friends.steve = { 
    firstName: "Steve", 
    lastName: "Jobs", 
    number: "(408) 555-5555", 
    address: ['1 Infinite Loop','Cupertino','CA','95014'] 
}; 

var list = function(obj) { 
    for(var prop in obj) { 
    console.log(prop); 
    } 
}; 

var search = function(name) { 
    for(var prop in friends) { 
    if(friends[prop].firstName === name) { 
     console.log(friends[prop]); 
     return friends[prop]; 
    } 
    else { 
     return "contact not found"; 
    } 
    } 
}; 

list(friends); 
search("Steve"); 

Проблема заключается в том, что, когда я передать строку «Steve» в качестве аргумента в функции поиска, он возвращает условие «Контакт не найден», а когда я передать строку «Билл» как arg в той же функции поиска, он отображает контактную информацию.

Как это возможно? Что я делаю не так?

ответ

6

В вашем коде на первой итерации цикла значение prop является чем-то другим, кроме Steve. Таким образом, условие if не работает, достигает части else и сразу возвращает contact not found.

Но, вы должны вернуть not found сообщений только тогда, когда ни один из объектов игровой firstName матчей, как этого

function search(name) { 
    for (var prop in friends) { 
    if (friends[prop].firstName === name) { 
     return friends[prop]; 
    } 
    } 
    return "contact not found"; 
}; 
+0

Спасибо, но почему это работает, когда я передаю строку «Билл» вместо «Стив»? –

+0

@AhmedMagdy 'Bill' - это первый ключ, возвращаемый при повторении объекта' friends'. Чтобы подтвердить это, вы можете использовать 'console.log' внутри цикла' for'. – thefourtheye

4
else { 
    return "contact not found"; 
} 

Вы не возвращающие не нашел, как только вы нашли контакт, который не соответствует ,

Вы не должны сдаваться, пока не закончите работу.

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