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

No entiendo cómo funciona esto. si omito el argumento i como función, se rompe la función pero el i no está atado a nada, entonces, ¿por qué necesita estar allí?Argumentos de la función de JavaScript para la función de filtro

+2

Quizás este recurso sea útil para usted: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter – Niko

+0

Por lo tanto, la función de filtro utiliza i como una forma de pasar el valor que sea en un índice de números es? javascript va y obtiene cada elemento, solo necesito decirle qué hacer con i? – Kevin

+0

En términos simples: si llama a filter() en una matriz, JavaScript toma cada valor de esa matriz y llama a la función que especificó (en este caso 'función (i) {return (i> 2);}' y llamadas esa función, pasando el valor actual que se está procesando como un parámetro para esa función. Dado que usted nombró el primer parámetro que su función acepta "i", ahora puede trabajar con la variable i dentro de esa función. "true", el valor estará en la nueva matriz que filter() devuelve, si devuelve "false", se omitirá. De esta forma, puede "filtrar" fácilmente una matriz. – Niko

Respuesta

25

.filter (Array.prototype.filter) llama a la función suministrada con 3 argumentos:

function(element, index, array) { 
    ... 
  • element es el elemento de matriz particular para la llamada.
  • index es el índice actual del elemento
  • array es la matriz que se filtra.

Puede usar cualquiera o todos los argumentos.

En su caso, i se refiere a la element y se utiliza en el cuerpo de su función:

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

En otras palabras, "elementos de filtro donde element es mayor que 2".

+1

+1, me gusta la claridad de esta explicación. –

+1

Gracias jamón ish, ¿puedo llamar filtro a una matriz de matrices? ¿A eso se refieren el índice y el elemento? y no estoy seguro de haber entendido pasar la parte de la matriz. ¿No está ya cubierto cuando digo numbers.filter? ¿Pasa javascript un puntero si no incluyo nada? – Kevin

+0

Si la matriz es una matriz de matrices, 'element' será una matriz. Ponlo de esta manera, para cada llamada a la función, 'element == array [index]'. No estoy seguro de lo que significa la última frase en su comentario, lo siento. – Hamish

0

El i es realmente muy importante. Se dice que da a la función de filtro información sobre los elementos sobre los que actúa. De hecho, se usa aquí (i > 2).

Esto mantiene los elementos cuyo valor es mayor que 2.

3

i es una referencia al objeto actual en el conjunto cuando dentro de ese cierre. Podría llamarse cualquier cosa, ya que solo es una variable, pero debería tener el mismo nombre dentro del cierre. En lugar de usar function(){}, podría usar una devolución de llamada, que es cómo se diseñó filter.

La referencia se hace implícitamente por la definición de .filter, se puede leer más aquí: http://msdn.microsoft.com/en-us/library/ff679973(v=vs.94).aspx

0

Eso i es el parámetro formal de la función que está proporcionando a .filter(). Si no lo inserta, la función no tendrá ninguna manera¹ de referirse al argumento que se está pasando (el i dentro del cuerpo de la función se referirá a alguna otra entidad que incluso podría no estar definida - window.i sería típico).


¹ que es técnicamente una mentira, pero lo consideran cierto para los propósitos de esta discusión

0

Un hilo viejo de hecho, pero solo completa lo que no se dice.

Los paréntesis están a su disposición para que el programador inserte el nombre de variable que tenga sentido para su programa específico.

Si eliges 'i', la mayoría de los otros (principiantes) programadores podrían pensar 'Ah, significa índice'. Lo cual estaría mal.

Si usa un argumento en lugar de tres, elegiría 'el' para representar el elemento, o si su matriz contiene sabores de gaseosa, elegiría 'sabor'.

Cuestiones relacionadas