更好的jQuery对象过滤

时间:2012-10-17 22:23:42

标签: javascript jquery object filter

在涉及许多对象的js app上工作,我希望能够通过特定变量获取对象。这是我的代码:

var pin = '0000';

$.each(employees, function(){
    if(this.pin === pin){
        curEmployee = this;
        return false;
    }
});

虽然这种方法有效,但我觉得有更好的解决方案......我正在用grep摆弄并尝试:

var pin = '0000';

curEmployee = $.grep(employees, function(e,i){
    return e[pin] === pin;
});

但是,确定结果更难,因为现在我需要检查长度以查看是否提供了返回的数组等。

只是寻找最佳实践解决方案。

3 个答案:

答案 0 :(得分:3)

由于始终从$.grep返回一个数组,因此只需获取数组的[0]索引。如果undefined,则无法匹配。

var pin = '0000';

curEmployee = $.grep(employees, function(e,i){
    return e.pin === pin;
})[0]; // <--- always grab the first index

如果没有jQuery,您可以以相同的方式使用Array.prototype.filter

var pin = '0000';

curEmployee = employees.filter(function(e,i){
    return e.pin === pin;
})[0];

答案 1 :(得分:0)

你总是可以使用jquery的filter方法:

var pin = '0000';

curEmployee = $(employees).filter(function(e){
  return e.pin === pin;
})[0];

答案 2 :(得分:0)

老实说,如果你正在使用物体和性能很重要......

..你想避免js中的异步错误..你应该去一个纯粹的js。方法

像上帝通过所有物体的循环。可能还有一些结果缓冲。我知道这是一个痛苦的屁股,你可能不喜欢这样做。但在大多数情况下,这是最快的方法。

我个人在js中使用这种方式。 crm我们正在制作,因为jquery的方式是没有1000多个对象......