Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

281
Vistas
¿Cómo puede dividir dinámicamente una matriz en Javascript/jQuery?

Tengo una galería de fotos que incluye imágenes que se subirán continuamente. La matriz PHP se ha convertido/codificado en una matriz JSON para que pueda manipular los datos con JavaScript.

Idealmente, me gustaría hacer clic en un botón ("Siguiente conjunto" en el ejemplo de CodePen) y cargar el siguiente conjunto (de 2) imágenes en miniatura. Esto es en un esfuerzo por no cargar todas las imágenes a la vez, que podrían ser cientos.

Problema: no puedo descifrar cómo dividir dinámicamente la matriz al hacer clic (las siguientes 5 imágenes). Por supuesto, puedo cargar, digamos, 2 a la vez:

 myArray.slice(0,2); myArray.slice(3,5);

Sin embargo, esto no funcionará porque las imágenes se agregarán continuamente a la galería. Además, tendría que tener demasiados conjuntos de los anteriores para seguir cortando 5 a la vez.

Yo he tratado:

  • Dividir la matriz en matrices más pequeñas
  • bucles for y bucles $.each

Esencialmente, necesito poder mover el índice de inicio y final del segmento (por ejemplo) 2 al hacer clic. En este momento, sigue cortando las mismas dos imágenes porque el corte no es dinámico.

Aquí está mi CodePen

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

No creo que haya una manera de hacer exactamente lo que quieres, pero puedes hacer un seguimiento de dónde estabas en la matriz y hacer un corte desde allí, así:

 var nextSet = myArray.slice(lastIndex, lastIndex + 2);

Reemplace su click() con esto (incluida la declaración de lastIndex ) para probarlo:

 var lastIndex = 0 $('.button').click(function() { var nextSet = myArray.slice(lastIndex, lastIndex + 2); lastIndex += 2; for (var i = 0; i < 2; i++) { var li = $('<li/>').attr('role', 'menuitem').appendTo('.myList').append('<img src=' + nextSet[i] + '>'); } });

Tenga en cuenta que he movido la línea slice() fuera del bucle for . No hay necesidad de dividir una nueva matriz para cada iteración.

Aquí hay un CodePen usando .slice() .

Un método alternativo es usar shift() para despegar el primer elemento de la matriz con cada iteración:

 var nextItem = myArray.shift()

Sin embargo, esto es destructivo (elimina el elemento de la matriz original), por lo que primero deberá hacer una copia de la matriz original si desea usarla para cualquier otra cosa. Reemplace su click() con:

 $('.button').click(function() { for (var i = 0; i < 2; i++) { var nextItem = myArray.shift(); var li = $('<li/>').attr('role', 'menuitem').appendTo('.myList').append('<img src=' + nextItem + '>'); } });

Aquí hay un CodePen usando .shift() .

about 4 years ago · Santiago Trujillo Denunciar

0

tu problema es simple, creo. haces un corte y siempre obtienes la misma matriz

 var array = [0,1,2,3,4,5]; let newArray1 = array.slice(0,2); // returns a new array let newArray2 = array.slice(0,2); // returns the same new array for(var i = 0; i < 2; i = i+2) { result = array.slice(i, i+2); console.log(result); }
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda