2012-02-11 141 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"); 

你可以試試這個方法