Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/11/2004, 05:03
Avatar de caricatos
caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Métodos de Arrays

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
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo