2012-02-11 136 views
-2

这是codeacademy项目的一部分。从开始到列表的部分();功能或多或少的工作。我的任务是使用for循环创建一个搜索函数。 预先感谢您。使用for循环搜索()。

var bob = { 
    firstName: "Bob", 
    lastName: "Jones", 

    phoneNumber: "(650) 777 - 7777", 
    email: "[email protected]" 
}; 

var mary = { 
    firstName: "Mary", 
    lastName: "Johnson", 

    phoneNumber: "(650) 888 - 8888", 
    email: "[email protected]" 
}; 

var contacts = [bob, mary]; 

function printPerson (person) { 
    console.log(person.firstName + " " + person.lastName); 
} 

var list = function(){ 
    var contactsNumber = contacts.length; 
    for(i=0; i<=contactsNumber; i++){ 
     printPerson(contacts[i]); 
    } 
}; 

list(); 

var search = function(lastName){ 
    var number = contacts.length; 
    for(i=0; i<= number; i++){ 
     if(lastName === contacts[i].lastName){ 
      printPerson(contacts[i]); 
     } 
    } 
}; 

search("Jones"); 
+2

你的问题是什么?你不明白什么? – 2012-02-11 11:35:25

+0

除了@DavidThomas说的话,你至少可以做的就是提供(通过编辑你的问题)你遇到的任何错误,并链接到Codacademy练习 – 2012-02-11 11:42:57

回答

0

因为你使用的var关键字,你没有访问到的功能联系。在联系人之前删除var关键字,它应该可以正常工作。

+0

从开始到列表()的部分; (除了TypeError:person是未定义的),问题出在搜索函数本身,因为它没有用正确的参数打印任何东西。 – metrampaz 2012-02-11 11:37:48

+2

这是错误的。除非在函数范围中重新声明'contacts',否则在函数中调用'contacts'会得到全局变量 – 2012-02-11 11:41:53

+0

@YiJiang谢谢。我不知道这是只有你在函数中声明了相同的变量。 – 2012-02-11 12:30:52

2

当你有数组中的2项,你想要的指数01循环的,而不是2。因此,使用<代替<=

for(var i = 0; i < number; i++) 
+0

它工作在:http://jsfiddle.net/4ZEF6/ – DhruvPathak 2012-02-11 11:41:04

2

,运动是窃听(或者是不知道,如果他们固定的),你必须运行所有其他函数来得到它正确的:

var bob = { 
    firstName: "Bob", 
    lastName: "Jones", 

    phoneNumber: "(650) 777 - 7777", 
    email: "[email protected]" 
}; 

var mary = { 
    firstName: "Mary", 
    lastName: "Johnson", 

    phoneNumber: "(650) 888 - 8888", 
    email: "[email protected]" 
}; 

var contacts = [bob, mary]; 

function printPerson (person) { 
    console.log(person.firstName + " " + person.lastName); 
} 

var list = function() 
{ 
    var contactsNum = contacts.length; 
    for (i=0; i < contactsNum; i++) 
    printPerson(contacts[i]); 
}; 

function search(lastName){ 
    var items = contacts.length; 
    for(i = 0; i < items; i++){ 
     if(contacts[i].lastName == lastName) 
       printPerson(contacts[i]);  
    } 
} 
list(); 
search("Jones"); 
+0

谢谢作为回复,但你的片段也不起作用。 – metrampaz 2012-02-11 11:43:42

+0

它不?即使我复制/粘贴它:( – Giannis 2012-02-11 11:50:57

0
var personList = [ 
    { 'FirstName' : "John", 'LastName': "Doe"}, 
    { 'FirstName' : "Jane", 'LastName': "Deen"} 
] 


function PersonSearchService() { 
    this.Print = function(person) { 
    console.log(person.FirstName + " " + person.LastName); 
    } 
    this.Search = function(lastName) { 
     for(var p in personList) {   
     if(personList[p].LastName === lastName) {    
      this.Print (personList[p]); 
     } 
     } 
    } 
} 

var p = new PersonSearchService(); 
p.Search ("Doe"); 

你可以试试这个方法