2012-04-06 65 views
0

嗨我一直在嘗試使用codeacademy.com學習Javascript,並且我已經達成了一項練習,當爲什麼我寫的練習似乎沒有任何意義。這是我的代碼:在數組的控制檯對象中打印

(function(){ 
    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]; 

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

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

     list(); 
})(); 

的問題是在列表功能,當我嘗試調用printPerson()函數,我得到這個人是不確定的,但如果我寫的,而不是list()函數如下:

printPerson(contacts[0]); 
    printPerson(contacts[1]); 

一切工作。我在做什麼錯誤的list()函數,它不工作?

回答

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

i這裏是一個常數。如果要替換:

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

所有陣列arrarr[arr.length]永遠是不確定的。你可能想要contacts[j]

+0

我必須是盲人或東西不敢相信我沒有看到這個錯誤感謝 – user1146440 2012-04-06 18:39:07

+0

@ user1146440:它很容易犯類似的錯誤,當你以同樣的方式命名你的長度是可變的你命名你的索引變量。稱之爲「長度」而不是「我」;你和每個閱讀你的代碼的人都會更加喜歡它。 – Claudiu 2012-04-06 19:07:30

2
for(var j= 0; j < i ; j++){ 
    printPerson(contacts[i]); // this should be contacts[j] 
} 
0
contacts.forEach(function(contact) { 
    printPerson(contact); 
}); 
0
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]; 
console.log(mary.phoneNumber); 
+0

請爲未來的訪問者添加一點解釋。 – 2016-08-03 07:00:23