Array.prototype.reverse
invierte el contenido de una matriz en su lugar (con mutación) ...
¿Existe una estrategia similarmente simple para revertir una matriz sin alterar el contenido de la matriz original (sin mutación)?
javascript
arrays
sfletche
fuente
fuente
Respuestas:
Puede utilizar slice () para hacer una copia a continuación inversa () se
Mostrar fragmento de código
fuente
If begin is omitted, slice begins from index 0.
- entonces es lo mismo quearray.slice(0)
En ES6:
fuente
[...].reverse
una ventaja en un caso de prueba muy simple. jsperf.com/reverse-vs-slice-reverse/1.slice
significativamente más rápido.slice
es probable que sea más rápido porque b / c[...]
es un genérico iterable a matriz, por lo que no puede hacer tantas suposiciones. Además, es probable queslice
esté mejor optimizado b / c que haya existido durante mucho tiempo.Otra variante ES6:
También podemos usar
.reduceRight()
para crear una matriz invertida sin realmente invertirla.Recursos utiles:
Array.prototype.reduceRight()
Arrow Functions
Comma Operator
fuente
reduceRight
es lento af(a, c) => a.concat([c])
se siente más idiomático que(a, c) => (a.push(c), a)
Prueba esta solución recursiva:
fuente
Una alternativa ES6 usando
.reduce()
y difundiendo.Básicamente, lo que hace es crear una nueva matriz con el siguiente elemento en foo y distribuir la matriz acumulada para cada iteración después de b.
Alternativamente,
.reduceRight()
como se mencionó anteriormente aquí, pero sin la.push()
mutación.fuente
Hay varias formas de invertir una matriz sin modificarla. Dos de ellos son
Prueba de rendimiento http://jsben.ch/guftu
fuente
EN Javascript simple:
fuente
Invertir en su lugar con intercambio variable solo con fines demostrativos (pero necesita una copia si no desea mutar)
fuente
es6:
fuente
1
al final podría haber sido algo mayor que cero, porque así es como funciona laArray.prototype.sort
devolución de llamada (o así llamadacompare function
). Básicamente, siempre se comparan 2 números y en este caso la comparación siempre es positiva, por lo que siempre se pasa al segundo número delante del primero :) esto es muy explicativo: stackoverflow.com/questions/6567941/…sort()
muta la matriz (es decir, la ordena en su lugar), que es lo que el OP quiere evitar.