Cómo intercambiar dos variables en JavaScript
Tengo estas dos variables:
var a = 1,
b = 2;
Mi pregunta es como cambiarlos? Solo estas variables, no ningún objeto.
Aquí hay una sola línea para intercambiar los valores de dos variables.
Variables dadas a
y b
:
b = [a, a = b][0];
Demostración a continuación:
var a=1,
b=2,
output=document.getElementById('output');
output.innerHTML="<p>Original: "+a+", "+b+"</p>";
// swap values for variables "a" and "b"
b = [a, a = b][0];
output.innerHTML+="<p>Swapped: "+a+", "+b+"</p>";
<div id="output"></div>
ES6 (Firefox y Chrome ya lo admiten (Destructuring Assignment Array Matching)):
let a = 5, b = 6;
[a, b] = [b, a];
console.log(`${a} ${b}`);
Puedes hacerlo:
var a = 1,
b = 2,
tmp;
tmp = a;
a = b;
b = tmp;
En términos de legibilidad y mantenimiento, esto es inmejorable (al menos en JavaScript). Cualquiera que mantenga el código (incluido usted dentro de seis meses) sabrá exactamente lo que está pasando.
Dado que estos son números enteros, también puedes usar cualquier número de trucos inteligentes 1 para intercambiar sin usar una tercera variable. Por ejemplo, puedes utilizar el operador xor bit a bit:
let a = 1, b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
console.log('a is now:', a);
console.log('b is now:', b);
Esto se llama algoritmo de intercambio XOR. Su teoría de funcionamiento se describe en este artículo de Wikipedia .
1 "El programador competente es plenamente consciente del tamaño limitado de su propio cráneo. Por eso aborda su tarea con total humildad y evita trucos astutos como la peste." - Edsger W. Dijkstra
No utilice el código siguiente. No es la forma recomendada de intercambiar los valores de dos variables (simplemente use una variable temporal para eso). Simplemente muestra un truco de JavaScript.
Esta solución no utiliza variables temporales ni matrices, solo una suma y es rápida . De hecho, a veces es más rápido que una variable temporal en varias plataformas .
Funciona para todos los números, nunca se desborda y maneja casos extremos como Infinity y NaN.
a = b + (b=a, 0)
Funciona en dos pasos:
(b=a, 0)
se estableceb
en el valor anterior dea
y produce0
a = b + 0
se establecea
en el antiguo valor deb