2016-06-15 50 views
0

我無法理解_.filter()函數如何工作在不合意的情況下。具體來說,我想了解是否有一種方法可以從被過濾的對象(而不是索引)中返回值。underscore.js使用上下文的過濾器函數

假設如下:

var A = [1,2,3,4,5,8,10,12,15,20,25,30]; 

現在用的標準實現:

_.filter(A, function(x) { return x % 5 == 0 ;}) 

這將返回[5,10,15,20,25,30]。我的問題如下:

_.filter([0,1,2,3,4,5,6], function(x) { return this[x] % 5 == 0 ;}, A) 

這會返回真值(可被5整除的)的索引[4,6]。但我想返回原始數組中真實指數的值,即[5,10]。

從我對其他underscore.js函數(如_.each()和_.map())的理解中,我將如何使用上下文來調用函數。

_.map([0,1,2,3,4,5,6], function(x) { return this[x] % 5 == 0 ; }, A) 

哪個會返回[false,false,false,false,true,false,true]。我知道_.filter()在內部調用_.each()來處理數組。因此,我呼叫_.filter([0,1,2,3,4,5,6], function(x) { return this[x] % 5 == 0 ;}, A)不起作用,因爲_.each()調用在其函數中沒有收到該值this[x]

我只是想念一些東西,或者只是沒有辦法調用_.filter(),它會返回值?

+0

你爲什麼要使用它? – JordanHendrix

+0

@JordanHendrix我只是想更好地通知。 – Grr

+0

您的示例有點複雜,因此很難判斷在使用_.filter時需要使用這些數組的哪一部分。你可以使用下劃線的鏈接機制,然後映射你得到的結果並返回值:http://underscorejs.org/#chain – kinakuta

回答

2

Somethisng這樣?:

var indexes = [0,1,2,3,4,5,6]; 
_.filter(A, function(x, i) { 
    return x % 5 == 0 && indexes.indexOf(i) > -1; 
}); 

enter image description here

+0

有用的解決方法。可能是下一個最佳選擇。 – Grr