numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(i){
return (i > 2);
});
我不明白這是如何工作的。如果我省略了我作爲一個函數參數,它會打破這個函數,但是我沒有和任何東西綁在一起,爲什麼它需要在那裏呢?過濾功能的JavaScript函數參數
numbers = [1,2,3,4,5,4,3,2,1];
var filterResult = numbers.filter(function(i){
return (i > 2);
});
我不明白這是如何工作的。如果我省略了我作爲一個函數參數,它會打破這個函數,但是我沒有和任何東西綁在一起,爲什麼它需要在那裏呢?過濾功能的JavaScript函數參數
.filter
(Array.prototype.filter
)的目的,要求用3個參數提供的功能:
function(element, index, array) {
...
element
是調用的特定數組元素。index
是元素的當前索引array
是被過濾的數組。您可以使用任何或所有參數。
在你的情況,i
指element
並在函數體被用於:
function(i){
return (i > 2);
}
換句話說,「過濾元件,其中element
大於2」。
i
其實很重要。它告訴過濾器功能信息關於它的行爲元素。其實它在這裏使用(i > 2)
。
這保持其值大於2。
i是在該組當前對象的參考時閉合內部元件。它可以被命名爲任何東西,因爲它只是一個變量,但是在關閉中必須具有相同的名稱。而不是使用function(){}
您可以使用回調,這是如何設計filter
。
參考是由.filter
定義隱式進行,你可以在這裏閱讀更多:http://msdn.microsoft.com/en-us/library/ff679973(v=vs.94).aspx
這i
是你提供給.filter()
功能的形式參數。如果你不插入它,函數將沒有任何方法來引用它正在傳遞的參數(函數體內的i
然後將引用一些其他可能甚至不被定義的實體 - window.i
將是典型的)。
¹這在技術上是騙人的,但考慮到它真正的討論
確實是一個古老的線程,但只是填寫什麼仍然沒有說明。
圓括號在那裏爲您程序員插入任何變量名稱對您的特定程序有意義。
如果您選擇'我',大多數其他(初學者)程序員可能會認爲'哦,我的意思是索引'。這將是錯誤的。
如果您使用一個參數而不是三個,我會選擇'el'來表示元素,或者如果您的數組包含蘇打水,我會選擇'flavor'。
也許這個資源對你很有幫助:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter – Niko
所以我被過濾器函數用來傳遞任何值在數字的索引是? JavaScript去,並獲取我只需要告訴它如何處理我的每個元素? – Kevin
簡而言之:如果對數組調用filter(),JavaScript會獲取該數組的每個值並調用您指定的函數(在本例中爲'function(i){return(i> 2);}'並調用該函數將正在處理的當前值作爲參數傳遞給該函數。由於您命名了函數接受「i」的第一個參數,因此您現在可以使用該函數中的變量i,如果它返回「true」,該值將在filter()返回的新數組中,如果它返回「false」,它將被跳過。這樣,你可以很容易地「過濾」一個數組。 – Niko