2017-02-23 139 views
0

Я только начинаю изучать кодирование, и я столкнулся с этим вопросом, который я не мог понять.Итерация через свойства объекта/ключи

«Вторая функция, которую мы добавим, будет называться поиском, и она будет принимать имя в качестве аргумента. Она попытается сопоставить первое имя, которое оно получает, с любым из первых имен в списке контактов наших друзей. Если он найдет совпадение, он зарегистрирует контактную информацию нашего друга (firstName, lastName, number, address) на консоли. "

переменные определяют следующим образом:

var friends = {}; 
friends.bill = { 
    firstName: "Bill", 
    lastName: "gates", 
    number: "1234567", 
    address: ['bishan','starbucks', 'centertable'] 
}; 

friends.steve = { 
    firstName: "Steve", 
    lastName: "jobs", 
    number: "987654", 
    address: ['orchird', 'ikoma', 'ga'] 
}; 

ответ следующим образом:

var search = function(name) { 
    for(var key in friends) { 
     if(friends[key].firstName === name) { 
      console.log(friends[key]); 
      return friends[key]; 
     } 
    } 
}; 

может кто-то лучше объяснить как же вар «ключ» произошло? и почему я не могу просто ввести friends.firstName === name, console.log (friends.name), return friends.name ??

был бы признателен, если бы кто-нибудь мог объяснить спасибо.

+0

обзор официальный объект в MDN https: //developer.mozilla. org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object –

+0

Как выглядит 'друзей'? что такое вывод 'console.log (friends [key]);'? –

+0

var friends = {}; friends.bill = { Firstname: "Билл", ЬавЬЫате: "ворота", номер: "1234567", адрес: [ 'Bishan', 'Старбакс', 'centertable'] }; друзей.steve = { firstName: "Steve", lastName: "jobs", номер: "987654", адрес: ['orchird', 'ikoma', 'ga'] }; – DarkArtistry

ответ

1

Из комментария OP в:

var friends = {}; 

friends.bill = { 
    firstName: "Bill", 
    lastName: "gates", 
    number: "1234567", 
    address: ['bishan','starbucks', 'centertable'] 
}; 

friends.steve = { 
    firstName: "Steve", 
    lastName: "jobs", 
    number: "987654", 
    address: ['orchird', 'ikoma', 'ga'] 
}; 

friends является вложенным объектом, который может быть представлена ​​следующим образом:

friends = { 
    bill: { 
     firstName: "Bill", 
     lastName: "gates", 
     number: "1234567", 
     address: ['bishan','starbucks', 'centertable'] 
    }, 
    steve: { 
     firstName: "Steve", 
     lastName: "jobs", 
     number: "987654", 
     address: ['orchird', 'ikoma', 'ga'] 
    } 
} 

В for..in итерации цикла по всем ключам в friends объекте с переменным key в вашем случае.

Почему я не могу просто ввести friends.firstName === name, console.log (friends.name), return friends.name ??

Потому что, чтобы сделать это, вам нужно иметь firstName или name как свойство в friends. Поскольку эти свойства вложены внутри (name не является событием внутри вложенных объектов), использовался цикл for..in.

1

У вас есть объект friends, который имеет 2 свойства bill и steve (это ключи). Вызов friends.bill вернет вам объект (значение) с firstname, lastname, number, address. Вам нужно перебирать все свойства вашего объекта friends, чтобы найти тот, что вам нужно

Вы можете использовать Object.values(obj)

var firstNameInput = "Steve"; 
 
var friends = {}; 
 
friends.bill = { 
 
    firstName: "Bill", 
 
    lastName: "gates", 
 
    number: "1234567", 
 
    address: ['bishan','starbucks', 'centertable'] 
 
}; 
 
friends.steve = { 
 
    firstName: "Steve", 
 
    lastName: "jobs", 
 
    number: "987654", 
 
    address: ['orchird', 'ikoma', 'ga'] 
 
}; 
 

 
//Iterates all the friends 
 
Object.values(friends).forEach(function(f){ 
 
    //Compare the property "firstname" with the input 
 
    if(f.firstName === firstNameInput){ 
 
    //Friend found 
 
    console.log(f); 
 
    return; 
 
    } 
 
});