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
[...].reverseuna ventaja en un caso de prueba muy simple. jsperf.com/reverse-vs-slice-reverse/1.slicesignificativamente más rápido.slicees 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 quesliceesté 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 FunctionsComma Operatorfuente
reduceRightes 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
1al final podría haber sido algo mayor que cero, porque así es como funciona laArray.prototype.sortdevolució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.