10月27, 2017

JS如何优雅的交换数值

有值a和b,怎么样能优雅又高效的交换他们的数值呢?

常规方法

交换数值最常见的方法应该是临时变量交换方法了,该方法比较通用,适合所有类型数值。效率也是很高的,经典的很优雅。

var a = 1,b = 2;
var tmp = a;
a = b;
b = tmp;

利用数组

该方法也比较常见,可以给小白装下逼。

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

利用对象

var a = 1,b = 2;
var tmp = {a: b, b: a};
a = tmp.a;
b = tmp.b;

ES6

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

异或操作

使用与数字。有两种写法。
方法1:

var a = 1,b = 2;
a = (b = (a ^= b) ^ b) ^ a;

方法2:

var a = 1,b = 2;
a ^=b;
b ^=a;
a ^=b;

数字加减方法

原理比较好理解,运用一些简单的加减法实现,仅适用于数字。
方法1:

var a = 1,b = 2;
a = a + b;
b = a - b; 
a = a - b;

方法2:

var a = 1,b = 2;
a = b -a +(b = a);

spilce交换数组内的元素

//i,j
arr[i] = arr.splice(j, 1, arr[i])[0];

原理也比较简单,就是删除 j 位置的数值换为 i 位置的数值,同时将splice的返回值赋值给 i 位置,就完成数组中两个位置的数据交换。

性能

没有研究性能,交换位置属于一个比较小的操作,所占用的时间都是毫秒级的,差距不是很多,如果不是有极致的追求,建议忽略小操作,从项目大局上来优化。

本文链接:https://luodao.me/post/js-exchange-value.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。