2016-04-13 138 views
0

我認爲下面的代碼是正確的:嵌套循環在JavaScript

函數應該檢查是否是的firstName一個實際接觸的firstName和給定屬性(丙)是接觸的一個屬性。

如果兩者均爲真,則返回該屬性的「值」。

使用參數「Kristian」和「lastName」對函數lookUpProfile的調用應返回值「Vos」,但不是。

一些想法在哪裏錯了?

var contacts = [ 
 
    { 
 
     "firstName": "Akira", 
 
     "lastName": "Laine", 
 
     "number": "0543236543", 
 
     "likes": ["Pizza", "Coding", "Brownie Points"] 
 
    }, 
 
    { 
 
     "firstName": "Harry", 
 
     "lastName": "Potter", 
 
     "number": "0994372684", 
 
     "likes": ["Hogwarts", "Magic", "Hagrid"] 
 
    }, 
 
    { 
 
     "firstName": "Sherlock", 
 
     "lastName": "Holmes", 
 
     "number": "0487345643", 
 
     "likes": ["Intriguing Cases", "Violin"] 
 
    }, 
 
    { 
 
     "firstName": "Kristian", 
 
     "lastName": "Vos", 
 
     "number": "unknown", 
 
     "likes": ["Javascript", "Gaming", "Foxes"] 
 
    } 
 
]; 
 

 
function lookUpProfile(firstName, prop){ 
 

 
    for(var i=0;i<contacts.length;i++){ 
 
     for(var j=0;j<contacts[i].length;j++){ 
 
      if(contacts[i][0]===firstName && contacts[i][j].hasOwnProperty(prop)){ 
 
        return contacts[i][j]; 
 
        } 
 
      } 
 
     } 
 
    } 
 

 

 

 
// Change these values to test your function 
 
lookUpProfile("Kristian", "lastName");

+0

'爲(VAR J = 0; j Scimonster

回答

0

與您的代碼的問題是,第二個for循環正在檢查根本不存在的屬性contacts[i].length。對象沒有.length屬性,只有陣列。

你不需要第二個循環來循環所有的屬性,你可以檢查firstName然後檢查你想要的屬性是否存在,然後返回它。

for(var i=0;i<contacts.length;i++){ if(contacts[i]['firstName']===firstName && contacts[i].hasOwnProperty(prop)){ return contacts[i][prop]; } }

應該是你想要的東西。


如果要循環的所有對象的屬性,你應該使用for in循環是這樣的:

for(var key in contacts[i]){ //place your check here using contacts[i][key] the get the value for the key }

編輯:添加for in例如

+0

是的,我把它當作一個有數組而不是對象數組的數組。無論如何,雖然你的第一個代碼更好,但它也不起作用。 – user1881983

+0

在這裏工作很好.http://jsbin.com/kebenabezu/edit?js,console 嘗試在控制檯面板中調用你的功能 –

+0

對不起。是的,它的工作原理。發生的事情是,作爲freeCodeCamp的任務,我犯了另外兩個錯誤的條件。一旦這些最後的代碼編碼良好,所有代碼都可以正常工作。 – user1881983