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

Nie rozumiem, jak to działa. jeśli pominę argument i jako argument funkcji, to zepsuje on tę funkcję, ale ja nie jest związana z niczym, więc dlaczego musi tam być?Argumenty funkcji JavaScript dla funkcji filtru

+2

Może ten zasób jest dla Ciebie przydatny: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter – Niko

+0

Więc i jest używane przez funkcję filtru jako sposób przekazywania dowolnej wartości na indeksie liczb jest? javascript idzie i pobiera każdy element, po prostu muszę powiedzieć, co zrobić z I? – Kevin

+0

W prostych słowach: Jeśli wywołasz filter() w tablicy, JavaScript pobiera każdą wartość z tej tablicy i wywołuje określoną funkcję (w tym przypadku 'function (i) {return (i> 2);}' i wywołania tej funkcji, przekazując bieżącą wartość, która jest przetwarzana jako parametr do tej funkcji. Ponieważ nazwałeś pierwszy parametr, który twoja funkcja akceptuje "i", możesz teraz pracować ze zmienną i wewnątrz tej funkcji. "true", wartość będzie w nowej tablicy, którą filter() zwróci, jeśli zwróci "false", zostanie pominięty, w ten sposób możesz łatwo "przefiltrować" tablicę – Niko

Odpowiedz

25

.filter (Array.prototype.filter) wywołuje funkcję Dostarczany z 3 argumenty

function(element, index, array) { 
    ... 
  • element jest określonym elementem tablicy dla wywołania.
  • to bieżący indeks elementu
  • array to tablica, która jest filtrowana.

Możesz użyć dowolnego lub wszystkich argumentów.

W przypadku, i dotyczy element i jest wykorzystywany w organizmie swojej funkcji:

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

Innymi słowy „elementy filtracyjnej element jest większa niż 2”.

+1

+1, podoba mi się klarowność tego wyjaśnienia –

+1

szynka ish, więc mogę wywołać filtr na tablicy tablic? czy do tego odnosi się indeks i element? i nie jestem pewien, czy rozumiem przekazanie części tablicy. Czy nie jest to już uwzględnione, gdy mówię numbers.filter. Czy javascript przekazuje ten wskaźnik, jeśli niczego nie dodaję? – Kevin

+0

Jeśli tablica jest tablicą tablic, "element" będzie tablicą. Połóż to w ten sposób, dla każdego wywołania funkcji, 'element == tablica [indeks]'. Nie jestem pewien, co oznacza ostatnie zdanie w twoim komentarzu, przepraszam. – Hamish

0

Numer i jest bardzo ważny. Mówi, przekazuje informacje o funkcji filtru na temat elementów, na których działa. W rzeczywistości jest używany tutaj (i > 2).

Dzięki temu elementy, których wartość jest większa niż 2.

3

I jest odniesienie do obiektu znajdującego się w zestawie, gdy wewnątrz tego zamknięcia. Można go nazwać cokolwiek, ponieważ jest to tylko zmienna, ale wtedy musiałby mieć taką samą nazwę wewnątrz zamknięcia. Zamiast używać numeru function(){} można użyć wywołania zwrotnego, które zostało zaprojektowane jako filter.

Odwołanie odbywa się niejawnie definicją .filter, można przeczytać więcej tutaj: http://msdn.microsoft.com/en-us/library/ff679973(v=vs.94).aspx

0

To i jest parametr formalny dla funkcji, którą dostarczają do .filter(). Jeśli go nie włączysz, funkcja nie będzie miała żadnej funkcji¹, aby odnieść się do argumentu, który jest przekazywany (i wewnątrz ciała funkcji odwoła się wtedy do jakiejś innej jednostki, która może nawet nie być zdefiniowana - window.i byłaby typowa).


¹ że jest technicznie kłamstwo, ale za to prawdziwe dla celów tej dyskusji

0

Stary wątek, ale po prostu wypełnienie tego, co nie zostało jeszcze powiedziane.

W nawiasach podano programistę, który wstawi nazwę zmiennej, która ma sens dla danego programu.

Jeśli wybierzesz "i", większość innych (początkujących) programistów może pomyśleć "O, ja oznacza indeks". Które byłoby nie tak.

Jeśli użyjesz jednego argumentu zamiast trzech, wybrałabym "el" do reprezentowania elementu lub jeśli twoja tablica zawiera smaki napoju gazowanego, wybrałabym "smak".

Powiązane problemy