比较函数参数中的传递和数组对象属性

时间:2015-10-12 21:17:29

标签: javascript

想要测试我的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。 你能帮忙的话,我会很高兴。谢谢。

2 个答案:

答案 0 :(得分:1)

  1. 团队不存在。这听起来像是指user数组。
  2. 代替user[i][lname],通过执行user[i].lname
  3. 访问lname属性
  4. 如果在else中返回null,则不会继续检查结果。你的回报应该在for循环之外,表明我们已经到达终点并且没有成功的回报。
  5. 工作示例:

    &#13;
    &#13;
    // 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"));
    &#13;
    &#13;
    &#13;

答案 1 :(得分:1)

为什么要循环?

var text = "your text val=foo";
var matches = text.match(/val=([\s\S]*)/);
var value = matches && matches[1];

同样但首先回击:

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