2016-12-28 73 views
2

我正在学习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朋友对象和第一功能。 但是第二个功能呢?如果他们不在联系人列表中,为什么我需要使用“名称”和“键”字。你能向我解释一下代码的真正作用吗?

此外,在运动结束,CodeAcademy把这个最后的代码做一些我想象:

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

它究竟是什么?

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function – mplungjan

+1

当你做'功能(名称){}''名称'是指你给的参数。 'for(var key in friends)'同样。你可以在这里定义var'key',它在循环的每次迭代中都会改变。 此练习会更好,如果你使用对象数组而不是对象与对象。查找javascript方括号'[]'和大括号{}' – Flame

+2

'之间的区别(朋友的var键){'可以是'(朋友的朋友)'''然后它会是'朋友[朋友]' - 他们选择命名var'key',因为它是一个键 - 名称被传入并且包含“Steve” – mplungjan

回答

0

井这样的功能:

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

key变量是指在每一个迭代对象friends的每个键,这意味着它的值是在第一次迭代“账单”和“史蒂夫”在第二次迭代。

name是这个函数search的参数,直到功能就像search('Steve')执行不具有实际的价值,看到你的价值'Steve'分配给它。

所以,list(friends)打印 '法案' 和 '史蒂夫' 在控制台,search('Steve')会打印此对象:

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

并返回。

+0

谢谢!所以,例如,如果我想用其他术语而不是'key'和'name',它会是一样的吗?现在它更有意义。 – Lewis

+0

是的,你可以使用其他词而不是'key'和'name',它将以相同的方式工作。 @Lewis –

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

好了,你有变种的朋友这是一个包含每个“朋友”,这也是对象的对象。内部VAR朋友的个人朋友对象的每一个包含属性(名字,姓氏等)

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");它实际上会去找到他在那个对象列表中并且返回'steve'具有的所有属性,比如名字地址等。

基本上就是总结一下。在函数中传递的'name'只允许您搜索'friends',[key]将允许for循环搜索朋友的所有密钥。

相关问题