Проблема с синтаксисом Javascript ForIn?

Функция поиска в следующем коде не работает, и я считаю, что это как-то связано с циклом For...In, но я новичок в JS и не знаю, почему:

var friends = {
bill: {
    firstName: "bill",
    lastName: "smith",
    number: 1,
    address: ["1"]
},
steve: {
    firstName: "steve",
    lastName: "smith",
    number: 2,
    address: ["2"]
}
};

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

var search = function(name) {

for(var friend in friends) {
    if(friend.firstName === name) {
        console.log(friend);
        return friend;
    }
}
};

search("steve");

person Flexo1515    schedule 26.08.2013    source источник
comment
Я рекомендую обратиться к документации MDN, если вы не уверены в определенной функции или конструкции: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/.   -  person Felix Kling    schedule 27.08.2013


Ответы (2)


Цикл for in перебирает ключи, а не значения.

friend – это строка, содержащая название каждого свойства.
Чтобы получить значение, используйте friends[friend].

person SLaks    schedule 26.08.2013

Прекрасную документацию по циклу for..in можно найти по адресу mdn. Где variable при каждой итерации присваивается "другому свойству имя".

Вам также может не понадобиться перебирать каждого друга. Что, если вы изменили функцию поиска, чтобы использовать hasOwnProperty< /a> на объекте:

var search = function(name) {
    if(friends.hasOwnProperty(name)){
        return friends[name];
    }
};

Это проверит наличие свойства name в объекте friends и вернет его. Вот краткий ПРИМЕР.

person Chase    schedule 26.08.2013