2015-10-12 37 views
1

想要測試我的find函數是否可以使用傳入參數來匹配用戶數組中的對象屬性。我相信這個問題是在if語句中遇到的,我不確定這是比較兩者的正確方法。比較函數參數中的傳遞和數組對象的屬性

// member object 
function member(lname, fname, mname){ 
    return{ 
    lname: lname, // object property 
    fname: fname, 
    mname: mname 
    }; 
} 

var user = [ 
    member('lastname', 'firstname', 'middlename'), 
    member('last', 'first', 'mname'), 
    member('l', 'f', 'm'), 
    member('ll', 'ff', 'mm') 
]; 

function find(lname){ 
    for(var i = 0; i < user.length; i++){ 
     if(lname === user[i][lname]){  
      return(console.log(lname)); 
     }else{ 
      return null; 
     } 
    } 
} 

console.log(find("last")); 

返回值爲null,如果我取出else語句,則返回undefined。 任何幫助將很好。謝謝。

+0

我看來,像'team'是不一樣的變量'user'? – adeneo

+3

哪裏是_team_?另外,如果你錯過了,不要在循環中返回,要保持循環再試一次。也'團隊[我] [LNAME]'應該'團隊[我] .lname' – dandavis

+0

是的,我忘了改變它。現在修復它。 – fruitlancer122

回答

1
  1. 團隊不存在。這聽起來像你指的是user陣列。
  2. 相反的user[i][lname],通過做user[i].lname
  3. 訪問L-NAME屬性如果你在別的返回null,你會不會繼續通過檢查結果。你的回報應該在for循環之外,以表明我們已經到了最後,並且沒有成功的回報。

工作例如:

// member object 
 
function member(lname, fname, mname){ 
 
    return{ 
 
    lname: lname, // object property 
 
    fname: fname, 
 
    mname: mname 
 
    }; 
 
} 
 

 
var user = [ 
 
    member('lastname', 'firstname', 'middlename'), 
 
    member('last', 'first', 'mname'), 
 
    member('l', 'f', 'm'), 
 
    member('ll', 'ff', 'mm') 
 
]; 
 

 
function find(lname){ 
 
    for(var i = 0; i < user.length; i++){ 
 
     if(lname === user[i].lname){  
 
      return "FOUND: " + lname; 
 
     } 
 
    } 
 
    return null; 
 
} 
 

 
console.log(find("last"));

1

爲什麼循環呢?

function find(lname){ 
    return user.filter(function(item){ 
     return item.lname === lname; 
    }); 
} 

相同,但返回的第一擊:

function find(lname){ 
    return user.filter(function(item){ 
     return item.lname === lname; 
    })[0]; 
} 
+0

如果你總是想要第一個匹配,你可能想把[0]放在返回值的末尾:})[0]; –

+0

@FievelYaltsen是的,我知道,這是我的第一個想法,但後來我認爲這個函數的名字是'find',所以它必須做它所說的。 – Rudy

相關問題