2009-06-04 7 views
56

LINQ tiene un método denominado operador conveniente Take() para devolver un número determinado de elementos en cualquier cosa que implementa IEnumerable. ¿Hay algo similar en jQuery para trabajar con matrices?¿Cómo truncar fácilmente una matriz con JavaScript?

+16

Chicos, por favor, aprender JavaScript antes de jQuery. Me temo que las preguntas de mañana serán "¿Qué otros tipos de datos jQuery expone al lado de Arrays?". –

Respuesta

109

hay un método

array.slice(0, 4); 

slice devolverá los primeros cuatro elementos.

No se olvide de asignar de nuevo a su variable si desea descartar los otros valores.

Nota: Esto es sólo javascript regular, sin necesidad de jQuery.

+1

perfecto gracias Bob. –

+13

¿Desea (0,4) devolver los primeros 4 no los primeros 5? –

+10

Eso no es verdad. Simon Keep está en lo correcto: el.El segundo argumento del método slice() es la posición de la matriz * después de * el último elemento que se devolverá. array.slice (0, 4) devolvería los elementos 0, 1, 2 y 3, un total de 4 elementos. Piense en el segundo argumento como el punto de corte, donde .slice (0, x) devolverá todos los elementos desde el comienzo de la matriz, hasta * pero * no incluido x. – Bungle

4

Si desea obtener tanto los elementos, así como eliminarlos de la matriz, utilice splice.

Si desea mantener los elementos de la matriz, utilice slice

2

Si desea extraer selectivamente los elementos de una matriz, puede utilizar el método jQuery.grep.

(a partir de la documentación de jQuery)

var arr = [ 1, 9, 3, 8, 6, 1, 5, 9, 4, 7, 3, 8, 6, 9, 1 ]; 

$("div").text(arr.join(", ")); 

arr = jQuery.grep(arr, function(n, i){ 
    return (n != 5 && i > 4); 
}); 

$("p").text(arr.join(", ")); 

arr = jQuery.grep(arr, function (a) { return a != 9; }); 
$("span").text(arr.join(", ")); 
18

Si estás preguntando cómo truncar (modificar una matriz mediante la eliminación de los elementos del final) a continuación, utilizar splice:

var a1 = [2,4,6,8]; 
var a2 = a1.splice(-2,2); // a1=[2,4], a2=[6,8] 

Si pregunta cómo recuperar un subconjunto de una matriz sin modificar el original, luego usa slice.

var a1 = [2,4,6,8]; 
var a2 = a1.slice(-2); // a1=[2,4,6,8], a2=[6,8] 

Simplemente recuerde que el empalme modifica, corta los accesos. Los números negativos como primer arg indican el índice desde el final de la matriz.

85

(2 años más tarde ...) Si está realmente buscando para truncar una matriz, también puede utilizar el atributo length:

var stooges = ["Moe", "Larry", "Shemp", "Curly", "Joe"]; 
stooges.length = 3; // now stooges is ["Moe", "Larry", "Shemp"] 

Nota: si asigna una longitud que es ya de la longitud actual, se introducen elementos de matriz indefinidos, como se muestra a continuación.

var stooges = ["Moe", "Larry", "Shemp"]; 
stooges.length = 5; 
alert(typeof stooges[4]); // alerts "undefined" 

EDIT:

Como @twhitehead se mencionan a continuación, la adición de elementos no definidos se puede evitar al hacer esto:

var stooges = ["Moe", "Larry", "Shemp"]; 
stooges.length = Math.min(stooges.length, 5); 
alert(stooges.length)// alerts "3" 
+5

Me sorprendí primero cuando vi esto en un código ... Pero es la mejor manera (si estás truncando desde el índice 0) http://davidwalsh.name/empty-array –

+2

Esta es una solución increíblemente simple. – Dominique

+2

¿Qué pasa con la recolección de basura haciendo esta forma? –

8

Establecer propiedad .length a un valor inferior.

documentación oficial: Array.prototype.length

+3

para matar a todos los elementos en la matriz, establecer la longitud en cero es más fácil. – hanmari

Cuestiones relacionadas