2017-02-23 139 views
0

我剛剛開始學習編碼,並且我遇到了這個我無法理解的問題。 「通過對象屬性/鍵迭代

」我們將添加的第二個函數將被稱爲搜索,它將以名字作爲參數,它會嘗試將它的名字與我們的朋友聯繫人列表中的任何名字進行匹配。如果發現匹配,它會將我們朋友的聯繫信息(名字,姓氏,號碼,地址)記錄到控制檯。「

變量定義如下:

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]; 
     } 
    } 
}; 

有人能更好地解釋沒了var 「鑰匙」 是怎麼來的呢?爲什麼我不能只輸入friends.firstName === name,console.log(friends.name),返回friends.name ??

如果有人能解釋謝謝你會很感激。

+0

審查官對象://developer.mozilla。 org/es/docs/Web/JavaScript/Referencia/Objetos_globales/Object –

+0

'friends'是什麼樣的? 'console.log(friends [key])的輸出是什麼;'? –

+0

var friends = {}; friends.bill = { 姓: 「比爾」, 名字: 「門」, 號碼: 「1234567」,地址 :[ '璧山', '星巴克', 'centertable'] }; 朋友。steve = { 姓氏:「Steve」, 姓氏:「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'] 
    } 
} 

超過在friends對象的所有密鑰的for..in循環迭代,與可變key你的情況。

爲什麼我不能只輸入friends.firstName === name,console.log(friends.name),return friends.name?

因爲,要做到這一點,你需要有firstNamenamefriends的屬性。由於這些屬性嵌套在內部(name不是嵌套對象內的事件),因此使用了一個for..in循環。

1

您有一個對象friends,它有兩個屬性billsteve(這些是鍵)。調用friends.bill將返回一個對象(值)與firstname, lastname, number, address。您需要遍歷你的對象friends的所有屬性,找到一個你需要

可以在MDN HTTPS使用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; 
 
    } 
 
});