2015-10-12 34 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

相关问题