你能解释一下这段代码吗? (联系人列表)
Could you explain me this block of code? (Contact List)
我正在自学 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 对象和第一个函数。
但是第二个功能呢?为什么我需要使用 "name" 和 "key" 单词,如果它们不在联系人列表中。你能解释一下代码的真正作用吗?
此外,在练习结束时,CodeAcademy 将此最终代码用于执行我想象的操作:
list(friends);
search("Steve");
它到底是什么?
// 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];
}
}
};
好的,所以你有 var friends,它是一个包含每个 'friend' 的对象,它们也是对象。 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] 实际上引用了 'friends' 中的每个 'friend' 属性,例如 bill 就是一个键。因此它会查看这些键中的每一个(bill、steve 等)并将其 firstname 设置为 name,这是先前传递的。因此,当您使用该函数 search("Steve");
时,它实际上会在该对象列表中找到他,并且 return 'steve' 具有的所有属性,例如名字地址等。
基本上总结一下。在函数中传递的 'name' 只允许您搜索 'friends' 而 [key] 将允许 for 循环搜索朋友的所有键。
在这个函数中:
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')
一样执行,看你赋值'Steve'
到它。
因此,list(friends)
在控制台中打印 'bill' 和 'steve',search('Steve')
将打印此对象:
{
firstName: "Steve",
lastName: "Jobs",
number: "333 333 333",
address: ["Apple's street", "Silicon Valley", "SV", "87368"]
}
和return它。
我正在自学 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 对象和第一个函数。 但是第二个功能呢?为什么我需要使用 "name" 和 "key" 单词,如果它们不在联系人列表中。你能解释一下代码的真正作用吗?
此外,在练习结束时,CodeAcademy 将此最终代码用于执行我想象的操作:
list(friends);
search("Steve");
它到底是什么?
// 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];
}
}
};
好的,所以你有 var friends,它是一个包含每个 'friend' 的对象,它们也是对象。 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] 实际上引用了 'friends' 中的每个 'friend' 属性,例如 bill 就是一个键。因此它会查看这些键中的每一个(bill、steve 等)并将其 firstname 设置为 name,这是先前传递的。因此,当您使用该函数 search("Steve");
时,它实际上会在该对象列表中找到他,并且 return 'steve' 具有的所有属性,例如名字地址等。
基本上总结一下。在函数中传递的 'name' 只允许您搜索 'friends' 而 [key] 将允许 for 循环搜索朋友的所有键。
在这个函数中:
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')
一样执行,看你赋值'Steve'
到它。
因此,list(friends)
在控制台中打印 'bill' 和 'steve',search('Steve')
将打印此对象:
{
firstName: "Steve",
lastName: "Jobs",
number: "333 333 333",
address: ["Apple's street", "Silicon Valley", "SV", "87368"]
}
和return它。