2011-03-28 7 views
8

¿Hay métodos por los que puedo omitir un número particular de objetos y tomar un cierto número de objetos de una matriz en javascript?Métodos de omisión de toma con matrices de JavaScript

Básicamente el patrón que estoy buscando es esto.

Supongo que tengo una matriz de 8 objetos.

primer bucle: Objetos de

Return en el índice 0 hasta 3 de la matriz.

segundo bucle:

devuelven objetos en el índice 4 a 7 de la matriz.

tercer bucle:

Volver al principio lo que los objetos de retorno a 0 a 3 de nuevo.

Ad infinitum .....

Me gustaría ver una solución basada en jQuery, si es posible, pero todo lo que estoy abierto para implementaciones de JavaScript primas también como estoy con ganas de aprender.

Saludos.

Respuesta

11

Algo como esto (normal JavaScript, no hay necesidad de jQuery;)):

var iterator = function(a, n) { 
    var current = 0, 
     l = a.length; 
    return function() { 
     end = current + n; 
     var part = a.slice(current,end); 
     current = end < l ? end : 0; 
     return part; 
    }; 
}; 

Entonces se le puede llamar:

var next = iterator(arr, 3); 
next(); // gives the first three 
next(); // gives the next three. 
//etc. 

DEMO

Es esta forma, la última iteración podría regresar menos elementos También podría extenderlo y hacer que la función acepte un paso variable y un parámetro de inicio diferente.

Si desea envolver alrededor, como si sólo hay dos elementos de la izquierda, para tomar los elementos desde el principio, y luego se pone un poco más sofisticado;)

Actualización: Wrap alrededor sería algo así como esto:

var iterator = function(a, n) { 
    var current = 0, 
     l = a.length; 
    return function() { 
     end = current + n; 
     var part = a.slice(current,end); 
     if(end > l) { 
      end = end % l; 
      part = part.concat(a.slice(0, end)); 
     } 
     current = end; 
     return part; 
    }; 
}; 

DEMO

+0

@FelixKling: +1 para una solución limpia y para recordarme los antiguos [strtok] (http://www.cplusplus.com/reference/clibrary/cstring/strtok/) días. –

+0

@ Felix: francamente ... ¡guau! ¡No es de extrañar que tengas un representante tan saludable! Creo que entiendo lo que está sucediendo ... ¿Llamaría a next() cada vez para asegurar que volveré al principio de la matriz una vez que haya llegado al final? Además de su actualización ... tome desde el principio de nuevo ... Sí, por favor! –

+0

@JamesSouth: Sí, funcionaría, pero tuve un pequeño error en el código. Se arregló ... dame unos segundos para la otra cosa;) –

8

Creo que quiere Array.slice o Array.splice.

var ary = [0,1,2,3,4,5,6,7]; 
alert(ary.splice(0,3).join(',')); 
+1

Tenga en cuenta que el empalme eliminará elementos de su matriz original. Slice no lo hará. –

1

Tome un vistazo a esto. Array.slice()

http://www.w3schools.com/jsref/jsref_slice_array.asp

+1

Obligatorio "Eww, w3fools".(En realidad no me importa, pero pensé que lo mencionaría antes que el siguiente tipo y sería un poco menos despectivo) –

+0

@Brad ok ... ¿por qué no debería usar el sitio? Tiene la respuesta (con un montón de anuncios, supongo). – climbage

+0

Como mencioné, soy realmente indiferente, pero hay algunas personas que son [realmente apasionadas] (http://w3fools.com/) sobre no usarlo . –

Cuestiones relacionadas