2017-02-23 126 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; 
 
    } 
 
});