您能向我解释这个代码块吗?(联系人列表)



我正在自己学习JavaScript,首先是阅读教程和书籍(例如雄辩)和文章(例如,在媒体上)。我还在做一些免费课程,特别是两个: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对象和第一个功能。但是第二个功能呢?如果不在联系人列表中,为什么我需要使用"名称"one_answers"键"单词。您能解释一下代码的实际功能吗?

另外,在练习结束时,CodeAcademy将此最终代码做我想象的事情:

list(friends);
search("Steve");

到底是什么?

在此功能中很好:

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

变量key是指每个迭代中对象friends的每个键,这意味着它的值是第一次迭代中的"账单",而在第二次迭代中则是'steve'。

name是此函数search的参数,它没有实际值,直到像search('Steve')一样执行函数,请参见将值'Steve'分配给它。

so,list(friends)打印'Bill'和steve in Console,search('Steve')将打印此对象:

{
    firstName: "Steve",
    lastName: "Jobs",
    number: "333 333 333",
    address: ["Apple's street", "Silicon Valley", "SV", "87368"]
}

并返回。

请参阅: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];
        }
    }
};

好的,所以您有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。[键]实际上是在"朋友"中引用每个"朋友"属性中的每一个,因此比尔是关键。因此,它查看了每个钥匙(Bill,Steve等)中的每个钥匙,并将其命名为"命名",这是早些时候通过的。因此,当您使用该函数search("Steve");时,实际上会在该对象列表中找到他,并返回"史蒂夫"具有诸如firstName地址等的所有属性。

基本上要总结。函数中传递的"名称"只允许您搜索"朋友",而[键]将允许循环搜索朋友的所有键。

最新更新