2012-02-11 6 views
-2

이것은 codeacademy 프로젝트의 일부입니다. 처음부터 list(); 기능은 어느 정도 작동합니다. 내 임무는 for 루프를 사용하여 검색 기능을 만드는 것이다. 미리 감사드립니다.for 루프를 사용하여 search().

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

무엇이 문제입니까? 너 이해 하지마? –

+0

@DavidThomas가 말한 것에 덧붙여, 당신이 할 수있는 최소한의 일은 당신이 겪고있는 오류를 제공하고, Codacademy 연습 문제에 대한 링크를 제공하는 것입니다. –

답변

0

var 키워드를 사용했기 때문에이 기능의 연락처에 액세스 할 수 없습니다. 연락처 전에 var 키워드를 삭제하면 올바르게 작동합니다. 당신은 배열의 두 항목이있을 때

+0

처음부터 목록까지의 부분(); (TypeError : person은 예외입니다.) 작업을 수행 할 때 올바른 인수로 아무것도 인쇄하지 않기 때문에 검색 기능 자체에 문제가 있습니다. – metrampaz

+2

잘못된 것입니다. 함수 범위에서'contacts'가 다시 선언되지 않으면, 함수에서'contacts'를 호출하면 전역 변수가됩니다. –

+0

@ YiJiang 감사합니다. 나는 당신이 함수에서 같은 var를 선언했을 때만 그것이라는 것을 몰랐다. –

2

, 당신은 인덱스 0 및 대한 루프 1하지2를 원한다. 그래서, <= 대신 <를 사용

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

여기에서 작동합니다. http://jsfiddle.net/4ZEF6/ – DhruvPathak

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

+0

그렇지 않습니까? 복사/붙여 넣기해도 성공 메시지가 나타납니다. – Giannis

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"); 

시도해 볼 수 있습니다.

관련 문제