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