Estuve haciendo nuevos métodos para los arrays:
Me gustaría que me dijeran si funcionan bien:
Rotar a la izquierda:
Código:
Rotar a la derecha:Array.prototype.rotarI = function() { var yo = this; var primero = yo.shift(); yo[yo.length] = primero; return yo; }
Código:
Cambiar 2 elementos: (esto es también útil para ordenación... el siguiente)Array.prototype.rotarD = function() { var yo = this; var primero = new Array(yo.pop()); return primero.concat(yo); }
Código:
Ordenar por un campo (array de objetos)Array.prototype.cambiar = function(a, b) { var yo = this; var temp = yo[a]; yo[a] = yo[b]; yo[b] = temp; return yo; }
Código:
Espero poder hacer la ordenación por el método quicksort más adelante.Array.prototype.ordenar = function(esto) { var yo = this; for (var i = 0, mayor = yo.length - 1; i < mayor; i ++) for (var j = i + 1; j < yo.length; j ++) if (yo[i][esto] < yo[j][esto]) yo.cambiar(i, j); return yo; }
Mover primer elemento a un luger determinado (rotando el resto):
Código:
Mover un elemento al final del array:Array.prototype.moverPrimeroA = function(b) { var yo = this; if (b == yo.length - 1) return yo.rotar(); else { if (b < (yo.length - 1)) { principio = yo.slice(0, b + 1).rotarI(); fin = yo.slice(b + 1, yo.length); return principio.concat(fin); } else return yo; } }
Código:
Mover un elemento a otra parte (usa los 2 métodos anteriores):Array.prototype.moverAlFinal = function(b) { var yo = this; if (b == 0) return yo.rotar(); else { if (b < (yo.length - 1)) { principio = yo.slice(0, b); fin = yo.slice(b, yo.length).rotarI(); return principio.concat(fin); } else return yo; } }
Código:
Saludos Array.prototype.mover = function(a, b) { var yo = this; if (a < 0 || b < 0) return yo; if (a == 0) return yo.moverPrimeroA(b); if (b == (yo.length - 1)) return yo.moverAlFinal(a); if (a > 0 && b < yo.length) { principio = yo.slice(0, a); mitad = yo.slice(a, b + 1).rotarI(); fin = yo.slice(b + 1, yo.length) return principio.concat(mitad, fin); } }