Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

113
Visualizações
array.reverse() por bloques en una matriz plana

Estoy escribiendo una animación de píxeles leyendo datos de un Unit8Array que contiene 5 cuadros, 72 binarios cada uno. Ahora pensé en invertir los fotogramas para invertir la animación. Entonces mi pregunta:

¿Hay alguna manera de revertir en bloque, o alguien tiene una idea creativa, cómo podría hacerlo? (No puedo simplemente correr hacia atrás, ya que cada cuadro necesita la información del anterior)

 const myArr = [1,2,3,4,5,6,7,8]; console.log(myArr.reverse());//8,7,6,5,4,3,2,1 //how to reach [7,8,5,6,3,4,1,2]? //would work fine with 2D array, //but don't have 2D const my2D = [[1,2],[3,4],[5,6],[7,8]];
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Esto debería hacerlo:

 const reversed = myArr .map((_, i, a) => a[i ^ 1]) .reverse()

La forma en que funciona es que asigna cada elemento de la matriz a otro elemento con el índice cambiado al invertir el bit 1 usando XOR (por ejemplo, 4 ^ 1 = 5, 5 ^ 1 = 4, 6 ^ 1 = 7, 7 ^ 1 = 6, etc.) y luego invirtiendo toda la matriz.

Este truco se puede usar para cualquier potencia de dos: puedes invertir grupos de 4 elementos usando ^ 3 para voltear los bits 1 y 2, grupos de 8 usando ^ 7 para voltear los bits 4, 2 y 1 y así sucesivamente. (Si necesitara otros tamaños de grupo, tendría que usar una operación más costosa como i + size - 1 - 2 * (i % size) en su lugar).

map llama a la devolución de llamada con varios argumentos: el primero es el valor del elemento, pero en realidad no lo necesitamos, por lo que lo asignaremos a una variable no utilizada _ . El segundo es el índice y el tercero es la propia matriz. En realidad solo necesitamos el índice, pero con el tercer argumento podemos evitar escribir el nombre de la matriz dos veces en la línea ( myArr.map((_, i) => myArr[i ^ 1]) también funcionaría).

Nota: dependiendo de su caso de uso exacto, tal vez otra opción sería hacer una array.length - i ^ 1 en el índice al acceder a los datos, en lugar de crear una nueva matriz.

about 4 years ago · Juan Pablo Isaza Relatório

0

Inspirado en la respuesta de CherryDT, se puede hacer con una llamada de map :

 const arr = [1,2,3,4,5,6,7,8]; console.log( arr.map((_, i) => arr[arr.length - i - 1 ^ 1]) );

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda