一个经典的问题,“两个变量之间值的交换”。

1、 引入临时变量进行数据交换

1
2
3
tmp = a;
a = b;
b = tmp;

引入临时变量,最最基本的方法,看着很low,但效率确实很高,经典的才是最优雅的。

2、 用对象进行数据交换

1
2
3
a = {a : b, b : a};
b = a.b;
a = a.a;

利用对象的键值对进行数据交换

3、用数组进行数据交换(一)

1
2
3
a = [a, b];
b = a[0];
a = a[1];

利用数组下标进行数据交换

4、用数组进行数据交换(二)

1
a = [b,b=a][0];

5、用异或操作进行数据交换(一)

1
2
3
a ^=b;
b ^=a;
a ^=b;

6、用异或操作进行数据交换(二)

1
a = (b = (a ^= b) ^ b) ^ a;

7、用数字之间的加减运算实现数据交换(仅适用于数字)(一)

1
2
3
a = a + b;
b = a - b;
a = a - b;

8、用数字之间的加减运算实现数据交换(仅适用于数字)(二)

1
a = b -a +(b = a);

9、用ES6的解构赋值语法实现数据交换

1
[a,b] = [b,a];

扩展:交换数组中的两个元素(用数组的splice() 方法)

1
2
array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
array[0] = array.splice(3, 1, array[0])[0]; //交换第0个和第3个元素