1

我一直在努力解决这个问题,我敢肯定这没什么大不了的,也许我只是因为整晚编码而感到疲倦,但我真的需要一些帮助......

“users”是一个类似数据库的对象,包含用户帐户信息(当然是服务器端),“get”是一个从 users 数组返回匹配对象数组的函数。

var users = [
    {
        name:"xymon",   
            age:19,
        pass:"mypass",  
        time:1364101200684
    },
    {
        name:"test",    
            age:19,
        pass:"x",   
        time:1364101200993
    },
    {
            name:"test",
            age:19,
            pass:"bleh",
            time:1364101200992
    }

];

function get(a){

}

我想要“get”做的是返回与数组中指定对象(a)匹配的属性,就像这样......

var matching_users = get({name:"test",age:19});

这将返回“users”数组中的两个对象,因为它们的属性与“get”中的指定属性匹配,因此“matching_users”将返回为...

[
    {
        name:"test",    
            age:19,
        pass:"x",time:1364101200993
    },
    {
            name:"test",
            age:19,
            pass:"bleh",
            time:1364101200992
    }

]
4

3 回答 3

2

迭代您的数组并检查每个项目是否匹配:

function get(a){
var r = [];
for (var i=0, len=users.length; i<len; ++i) {
    var doAdd = true;
    for (var p in a) {
        if (a.hasOwnProperty(p)) {
            if (a[p] != users[i][p]) {
                doAdd = false;
                break;
            }
        }            
    }    
    if (doAdd)
        r.push(users[i]);
}
return r;
}
于 2013-03-25T12:46:13.460 回答
1
function get(a) {
  var matches = [];

  for (var i in users) {
     var matched = true;

     for (var prop in a) {
         if (a.hasOwnProperty(prop) && users[i][prop] !== a[prop]) {
             matched = false;
             break;
         }
     }

     if (matched) matches.push(users[i]);
  }

  return matches;
}
于 2013-03-25T12:47:13.610 回答
0
 function get(a) {
 var result = [];
      users.forEach(function (v, i) {
           if (v.name == a.name && v.age == a.age) {
                result.push(v);               
           }
 });

结果将是具有匹配对象的数组。

于 2013-03-25T13:04:50.087 回答