别划了,快进来,找个位置随便坐,交换两个变量的值,你知道几种方法

487 阅读2分钟

搬运自B站技术蛋老师视频

全文约500字,阅读需要约5分钟

临时变量法

上大学时接触到的第一种交换变量的方法,可以想像成桌上有三个瓶子,a瓶装的是可乐,b瓶装的是雪碧,c瓶是一个空瓶,很容易就可以想到a倒入c,b倒入a,c倒入b即可完成交换

let a = 0, b = 1;
let c = a;
a = b;
b = c;
console.log(a, b); // 1 0

加减法

通过数学加减运算来交换变量的值,思想有点类似面试经常碰到的一道经典思维题,问你有一个4L的瓶子,有一个9L的瓶子,如何从一个池塘中取到6L的水,过程如下(单位为L)
0/0 0/9 4/5 0/5 4/1 0/1 1/0 1/9 4/6

let a = 0, b = 1;
a = a + b;
b = a - b;
a = a - b;
console.log(a, b); // 1 0

数组法

思路比较简单,通过存取数组实现变量交换

let a = 0, b = 1;
a = [a, b];
b = a[0];
a = a[1];
console.log(a, b); // 1 0

对象法

思想和上一个数组法比较类似,只是将数组换成了对象

let a = 0, b = 1;
a = {a: b, b: a};
b = a.b;
a = a.a;
console.log(a, b); // 1 0

数组运算法

通过运算符优先级实现
先执行b = a
再执行a = [b, 0][0]

let a = 0, b = 1;
a = [b, b = a][0];
console.log(a, b); // 1 0

按位异或法

异或即对应的二进制位相同返回0,不同返回1

let a = 0, b = 1;
a = a ^ b;
b = a ^ b;
a = a ^ b
console.log(a, b); // 1 0

解构赋值法

通过es6解构赋值语法实现

let a = 0, b = 1;
[a, b] = [b, a];
console.log(a, b); // 1 0

更多方法欢迎大佬们评论补充

个人CSS作品项目正在搭建中