2012-10-17 44 views
1

在一個涉及很多對象的js應用程序上工作時,我希望能夠通過特定變量獲取對象。這裏是我的代碼:更好的jQuery對象過濾

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; 
}); 

然而,很難確定結果,因爲現在我需要檢查長度以查看是否提供了返回的數組等等。

只需尋找最佳實踐解決方案。

+2

這可能更適合CodeReview - *最佳實踐*問題將引發爭論,這是很好的避免在SO上。 – ahren

+1

我總是使用第一個,因爲「break」只允許枚舉必要的內容。也許這只是一箇舊的習慣,雖然... –

回答

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]; 
+0

好的答案,甚至沒有想到這一點。 – Jonathan

0

你總是可以使用jQuery的filter方法:

var pin = '0000'; 

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

在所有誠實,如果你正在使用aloot的物體和性能很重要...

..你想要避免js中的異步bugies ..你應該去純js。做法。

有點像循環哪個神槽的所有對象。並可能有一些結果緩衝。我知道這是一個在屁股疼痛,你可能不喜歡這樣做。但它是大多數情況下最快的方法。

我個人在js中使用這樣的aproach。 crm我們正在製作,因爲jquery的方式在1000多個對象上是不行的...