español ejemplos descargar definicion curso caracteristicas javascript

ejemplos - javascript html



¿Cómo se puede ordenar una matriz sin mutar la matriz original? (6)

Pruebe lo siguiente

function sortCopy(arr) { return arr.slice(0).sort(); }

La expresión slice(0) crea una copia de la matriz que comienza en el elemento 0.

Supongamos que quería una función de clasificación que devuelve una copia ordenada de la matriz ingresada. Intenté ingenuamente esto

function sort(arr) { return arr.sort(); }

y lo probé con esto, lo que demuestra que mi método de sort está mutando la matriz.

var a = [2,3,7,5,3,7,1,3,4]; sort(a); alert(a); //alerts "1,2,3,3,3,4,5,7,7"

También probé este enfoque

function sort(arr) { return Array.prototype.sort(arr); }

pero no funciona en absoluto.

¿Hay una manera directa de evitar esto, preferiblemente de una manera que no requiera laminar manualmente mi propio algoritmo de clasificación o copiar cada elemento de la matriz en uno nuevo?


Puede usar slice sin argumentos para copiar una matriz:

var foo, bar; foo = [3,1,2]; bar = foo.slice().sort();


Solo copie la matriz. Hay muchas formas de hacerlo:

function sort(arr) { return arr.concat().sort(); } // Or: return Array.prototype.slice.call(arr).sort(); // For array-like objects


También puedes hacer esto

d = [20, 30, 10] e = Array.from(d) e.sort()

De esta forma, d no se mutará.

function sorted(arr) { temp = Array.from(arr) return temp.sort() } //Use it like this x = [20, 10, 100] console.log(sorted(x))


Uso Object.assign() para la mayoría de mis copias:

var copyArray = Object.assign([], originalArray).sort();

Sin embargo, después de revisar los comentarios de OP, investigué un poco de copia profunda y resultó que Object.assign no solo realiza una copia superficial, sino que solo selecciona propiedades enumerables y propias (como se responde en esta publicación ).