2016-05-14 18 views
1

我試圖重構這個函數,但已經撞牆了。函數試圖完成的是查找JSON對象中是否存在聯繫人,如果存在,請確定提供的第二個參數是否是存在於指定對象上的屬性。重構查找函數

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){ 
// Only change code below this line 
for (var i = 0; i < contacts.length; i++) { 
    if (contacts[i].firstName === firstName && contacts[i].hasOwnProperty(prop)) { 
     return contacts[i][prop]; 
    } 

} 

    for (var j = 0; j < contacts.length; j++) { 
    if (contacts[j].firstName !== firstName) { 
     return "No such contact"; 
    } else if (!contacts[j].hasOwnProperty(!prop)) { 
     return "No such property" ; 
    } 

} 

// Only change code above this line 
} 

// Change these values to test your function 
lookUpProfile("kyle", "lastName"); 
+0

會不會有永遠只能是一個接觸的比賽,或許多返回true? – Andy

回答

2

filter任何比賽,如果財產以極false

function lookUpProfile(firstName, prop) { 
    var list = contacts.filter(function (el) { 
    return el.firstName === firstName; 
    }); 
    return list.length && list[0][prop] ? true : false; 
} 

lookUpProfile("kyle", "lastName"); // false 
lookUpProfile("Akira", "lastName"); // true 
lookUpProfile("Akira", "password"); // false 

DEMO

0

我不完全確定你在做什麼。函數可以報告這兩種情況的唯一方法是讓它返回一個包含結果的對象。 試試這個。

function lookUpProfile(firstName, prop){ 
// Only change code below this line 
    var result ={contactExist: false, secondParameter:false}; 
    for (var i = 0; i < contacts.length; i++) { 
     if (contacts[i].firstName === firstName) { 
      result.contactExists=true; 
      result.secondParameter= contacts[i][prop]!=null; 
      return result; 
     } 
    } 
    return result; 

// Only change code above this line 
} 
1

有沒有必要循環通過函數兩次,因爲你現在有它。一個快速的變化會給你這樣的事情:

function lookUpProfile(firstName, prop){ 
    var nameFound = false; 

    for (var i = 0; i < contacts.length; i++) { 
     var contact = contacts[i]; 
     // if a correct name is found, store that 
     if(contact.firstName === firstName){ 
      nameFound = true; 
      if(contact.hasOwnProperty(prop)) { 
       return contact[prop]; 
      } 
     }     
    } 

    return nameFound ? "No such property" : "No such contact"; 
} 

基本上你只需要添加一個檢查沿着一個特定的名稱被發現的方式。如果該屬性存在,該函數將返回該對象,但如果碰巧到達末尾(找不到匹配),則知道是否找到名稱。

這假定您只想返回找到的第一個匹配項。