2012-06-27 87 views
9
numbers = [1,2,3,4,5,4,3,2,1]; 
var filterResult = numbers.filter(function(i){ 
    return (i > 2); 
});  

我不明白這是如何工作的。如果我省略了我作爲一個函數參數,它會打破這個函數,但是我沒有和任何東西綁在一起,爲什麼它需要在那裏呢?過濾功能的JavaScript函數參數

+2

也許這個資源對你很有幫助:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter – Niko

+0

所以我被過濾器函數用來傳遞任何值在數字的索引是? JavaScript去,並獲取我只需要告訴它如何處理我的每個元素? – Kevin

+0

簡而言之:如果對數組調用filter(),JavaScript會獲取該數組的每個值並調用您指定的函數(在本例中爲'function(i){return(i> 2);}'並調用該函數將正在處理的當前值作爲參數傳遞給該函數。由於您命名了函數接受「i」的第一個參數,因此您現在可以使用該函數中的變量i,如果它返回「true」,該值將在filter()返回的新數組中,如果它返回「false」,它將被跳過。這樣,你可以很容易地「過濾」一個數組。 – Niko

回答

25

.filterArray.prototype.filter)的目的,要求用3個參數提供的功能:

function(element, index, array) { 
    ... 
  • element是調用的特定數組元素。
  • index是元素的當前索引
  • array是被過濾的數組。

您可以使用任何或所有參數。

在你的情況,ielement並在函數體被用於:

function(i){ 
    return (i > 2); 
} 

換句話說,「過濾元件,其中element大於2」

+1

+1,我喜歡這個解釋的清晰度。 –

+1

謝謝火腿ish,所以我可以調用一個數組數組的過濾器?那索引和元素指的是什麼?我不確定我是否理解傳遞數組部分。當我說numbers.filter時,這不是已經涵蓋的內容。如果我不包含任何內容,JavaScript是否會傳遞此指針? – Kevin

+0

如果數組是數組的數組,'element'將是一個數組。用這種方式,對每個函數的調用,'element == array [index]'。不知道你評論中的最後一句話是什麼意思,對不起。 – Hamish

0

i其實很重要。它告訴過濾器功能信息關於它的行爲元素。其實它在這裏使用(i > 2)

這保持其值大於2。

3

i是在該組當前對象的參考時閉合內部元件。它可以被命名爲任何東西,因爲它只是一個變量,但是在關閉中必須具有相同的名稱。而不是使用function(){}您可以使用回調,這是如何設計filter

參考是由.filter定義隱式進行,你可以在這裏閱讀更多:http://msdn.microsoft.com/en-us/library/ff679973(v=vs.94).aspx

0

i是你提供給.filter()功能的形式參數。如果你不插入它,函數將沒有任何方法來引用它正在傳遞的參數(函數體內的i然後將引用一些其他可能甚至不被定義的實體 - window.i將是典型的)。


¹這在技術上是騙人的,但考慮到它真正的討論

0

確實是一個古老的線程,但只是填寫什麼仍然沒有說明。

圓括號在那裏爲您程序員插入任何變量名稱對您的特定程序有意義。

如果您選擇'我',大多數其他(初學者)程序員可能會認爲'哦,我的意思是索引'。這將是錯誤的。

如果您使用一個參數而不是三個,我會選擇'el'來表示元素,或者如果您的數組包含蘇打水,我會選擇'flavor'。