Array.prototype.reverse
inverte o conteúdo de uma matriz no local (com mutação) ...
Existe uma estratégia igualmente simples para reverter uma matriz sem alterar o conteúdo da matriz original (sem mutação)?
javascript
arrays
sfletche
fonte
fonte
Respostas:
Você pode usar o slice () para fazer uma cópia, em seguida, reverse () que
Mostrar snippet de código
fonte
If begin is omitted, slice begins from index 0.
- por isso, é o mesmo quearray.slice(0)
No ES6:
fonte
[...].reverse
uma vantagem em um caso de teste muito simples. jsperf.com/reverse-vs-slice-reverse/1.slice
significativamente mais rápido.slice
é provável que seja mais rápido , pois o b / c[...]
é um iterável para matriz genérico, portanto não pode fazer tantas suposições. Além disso, é provável queslice
seja melhor otimizado porque já existe há muito tempo.Outra variante do ES6:
Também podemos usar
.reduceRight()
para criar uma matriz invertida sem realmente revertê-la.Recursos úteis:
Array.prototype.reduceRight()
Arrow Functions
Comma Operator
fonte
reduceRight
é lento af(a, c) => a.concat([c])
se sente mais idiomática que(a, c) => (a.push(c), a)
Experimente esta solução recursiva:
fonte
Uma alternativa ES6 usando
.reduce()
e espalhando.Basicamente, o que ele faz é criar uma nova matriz com o próximo elemento em foo e espalhar a matriz acumulada para cada iteração após b.
Alternativamente,
.reduceRight()
como mencionado acima aqui, mas sem a.push()
mutação.fonte
Existem várias maneiras de reverter uma matriz sem modificar. Dois deles são
Teste de desempenho http://jsben.ch/guftu
fonte
INTO Javascript simples:
fonte
Reversão no local com troca de variável apenas para fins demonstrativos (mas você precisa de uma cópia se não quiser fazer a mutação)
fonte
es6:
fonte
1
no final poderia ter sido maior que zero, porque é assim que oArray.prototype.sort
retorno de chamada (ou o chamadocompare function
) funciona. Basicamente, você sempre compara 2 números e, nesse caso, a comparação retorna sempre positiva, por isso diz sempre mover para o segundo número na frente do primeiro :) isso é muito explicativo: stackoverflow.com/questions/6567941/…sort()
modifica a matriz (ou seja, classifica-a no lugar), que é o que o OP deseja evitar.