2012-02-11 5 views
-2

Это часть проекта codeacademy. Часть от начала до списка(); функция более или менее работает. Моя задача - сделать функцию поиска, используя для цикла. Спасибо заранее.поиск() используя для цикл.

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 undefined) проблема связана с самой функцией поиска, потому что она ничего не печатает с правильным аргументом. – metrampaz

+2

Это неправильно. Если «контакты» не обновлены в области функций, вызов 'contacts' в функции получит глобальную переменную –

+0

@YiJiang Спасибо. Я не знал, что это было только в том случае, если вы заявили о том же var в функции. –

2

Когда у вас есть 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"); 

Вы можете попробовать таким образом

Смежные вопросы