我正在自学JavaScript,我开始阅读教程和书籍(如Eloquent)和文章(例如在Medium上)。我也在做一些免费课程,特别是两门:freeCodeCamp和CodeAcademy。
今天我不得不面对CodeAcademy的联系人列表练习,我不确定我是否理解它。
经过一些提示,这是我提出的最终代码:
var friends = {
bill: {
firstName: "Bill",
lastName: "Gates",
number: "555 555 555",
address: ["One Miscrosoft Way", "Redmond", "WA", "98052"]
},
steve: {
firstName: "Steve",
lastName: "Jobs",
number: "333 333 333",
address: ["Apple's street", "Silicon Valley", "SV", "87368"]
}
};
var list = function(friends) {
for (var firstName in friends) {
console.log(firstName);
}
};
var search = function(name) {
for (var key in friends) {
if (friends[key].firstName === name) {
console.log(friends[key]);
return friends[key];
}
}
};
list(friends);
search("Steve");
.as-console-wrapper { max-height: 100% !important; top: 0; }
我理解了var friends对象和第一个函数。 但是第二个功能呢?如果他们不在联系人列表中,为什么我需要使用“姓名”和“关键”字样。你能解释一下代码到底做了什么吗?
此外,在练习结束时,CodeAcademy将这个最终代码放在我想象的地方:
list(friends);
search("Steve");
究竟是什么?
答案 0 :(得分:0)
请参阅:for...in loops
// basically the same thing as doing
// function search(name){...}
// this just creates a function in this scope
var search = function(name) {
// for..in loop loops through the property
// names in the friends object
for (var key in friends) {
// "key" has the value of either "steve" or "bill"
// if key === steve then friends[key] is the same
// thing as doing friends.steve
// if friends.steve.firstName === name
if (friends[key].firstName === name) {
console.log(friends[key]);
return friends[key];
}
}
};
答案 1 :(得分:0)
好的,所以你有var朋友,这是一个包含每个'朋友'的对象,它们也是对象。 var friends中的每个朋友对象都包含属性(名字,姓氏等)
var search = function(name) {
for (var key in friends) {
if (friends[key].firstName === name) {
console.log(friends[key]);
return friends[key];
}
}
};
这就是你迷路的地方。好的,所以你创建搜索并将其设置为一个函数。在函数内部传递名称,在此处引用friends[key].firstname === name
。
[key]实际上是在“朋友”中引用这些“朋友”属性中的每一个,因此例如,账单是关键。因此,它会查看这些键中的每一个键(bill,steve等)并设置名称的名字,这是之前传递的。因此,当您使用该函数search("Steve");
时,它实际上将在该对象列表中找到他并返回'steve'所具有的所有属性,例如名字地址等。
基本上总结一下。函数中传递的“名称”只允许您搜索“朋友”,[键]将允许for循环搜索朋友的所有键。
答案 2 :(得分:0)
这个功能很好:
var search = function(name) {
for (var key in friends) {
if (friends[key].firstName === name) {
console.log(friends[key]);
return friends[key];
}
}
};
变量key
指的是每次迭代中对象friends
的每个键,这意味着它的值是' bill'在第一次迭代和' steve'在第二次迭代中。
name
是此函数search
的参数,在执行函数search('Steve')
之前,它没有实际值,请参阅赋值{{1}对它来说。
所以,'Steve'
打印' bill'和'史蒂夫'在控制台中,list(friends)
将打印此对象:
search('Steve')
并将其归还。