Resolviendo cuestiones de programación: Interchange Elemento d en pos1 con elemento d en pos2 en las listas simples de Javascript
Vamos a adentrarnos en el mundo del desarrollo web y, más concretamente, en uno de los lenguajes que conforman la triada fundamental de la web moderna: Javascript.
Javascript es uno de esos lenguajes de programación que, por su potencia y versatilidad, es una herramienta indispensable en el bagaje de cualquier desarrollador web. Y como tal, conocer sus entresijos y sutilezas puede marcar la diferencia cuando nos enfrentamos a problemas complejos en nuestro día a día.
Uno de esos problemas recurrentes es el que tendremos que resolver hoy: ¿Cómo intercambio el elemento d que ocupa la pos1 con el elemento d que se encuentra en la pos2 en listas simples de Javascript?
// Aquí tenemos una lista simple
var lista = [ 'a', 'b', 'c', 'd', 'e', 'f' ];
// Supongamos que queremos intercambiar 'c' (pos1) por 'e' (pos2)
var pos1 = 2, pos2 = 4;
var temp = lista[pos1]; // Guardamos 'c' en una variable temporal
lista[pos1] = lista[pos2]; // Colocamos 'e' en la posición donde estaba 'c'
lista[pos2] = temp; // Colocamos 'c' en la posición donde estaba 'e'
// Ahora nuestra lista se verá así: ['a', 'b', 'e', 'd', 'c', 'f']
Pero, ¿por qué es necesario hacer esto? ¿No hay una forma más sencilla? La respuesta es sí, de hecho, hay otras maneras de llevarlo a cabo. Pero esta es una de las más eficaces en términos de rendimiento, ya que solo implica tres operaciones de asignación, y no requiere de ningún método costoso o bucle for que recorra la lista.
Además, este tipo de operación es aplicable a una amplia variedad de estructuras de datos, no solo a las listas, sino también a los arrays, o incluso a las strings (cadenas de texto), si las tratamos como un array de caracteres. Lo que nos lleva a otro ejemplo:
// Supongamos que en vez de una lista, tenemos una cadena de texto
var str = "abcdef";
// Queremos intercambiar 'c' por 'e'
var pos1 = 2, pos2 = 4;
var temp = str.charAt(pos1); // Guardamos 'c'
str = str.substr(0, pos1) + str.charAt(pos2) + str.substr(pos1 + 1); // Insertamos 'e' donde estaba 'c'
str = str.substr(0, pos2) + temp + str.substr(pos2 + 1); // Insertamos 'c' donde estaba 'e'
// Ahora nuestra cadena se ve así: "abeedf"
Por supuesto, hay muchas más cuestiones a tener en cuenta a la hora de optimizar nuestro código, como la legibilidad, la reusabilidad, y la escalabilidad del mismo. Pero con este simple ejemplo ya hemos dado un primer paso en esa dirección.