js交换两个变量之间值的11种方法总结及性能分析(附代码)js教程

最近做某个项目时,其中有一个需求是交换数组中的两个元素。当时使用的方法是:

(在JS中,这种方式效率确实很高,而且就算是其它语言中,只要tmp变量提前创建,性能也不会很低,反而是一些杂技派和少数派性能方面很低)

基本上可以说:经典的才是最优雅的

第二种:利用一个新的对象来进行数据交换

适用性:适用于所有类型代码如下:

a={a:b,b:a};b=a.b;a=a.a;简要说明:这种方式在实战中应用的很少

第三种:利用一个新的数组来进行数据交换

a=[b,b=a][0];简要说明:这种方式在各大论坛中都有看到有人使用,但经测试实际性能并不高

第四种:利用数组交换变量(需EJS支持)

`[a,b]=[b,a];简要说明:这也是在ES6出来后看到有人用的,实际在现有的浏览器中测试,性能很低

第五种:利用trycatch交换

a=(function(){;try{returnb}finally{b=a}})();简要说明:这种方法应该是基本没人使用的,也没有什么实用性,而且性能也是属于在各种方法中垫底的

第六种:异或操作交换变量第一种方式

适用性:适用于数字或字符串代码如下:

a=(b=(a^=b)^b)^a;简要说明:异或方法在数字或字符串时用到的比较普遍,而且性能也不低

第七种:异或操作交换变量第二种方式

a^=b;b^=a;a^=b;简要说明:异或方法在数字或字符串时用到的比较普遍,而且性能也不低

第八种:数字之间的加减运算来实现,第一种加减方式

适用性:仅适用于数字代码如下:

a=a+b;b=a-b;a=a-b;简要说明:这种用法在只用于数字间的交换时,性能也不弱

第九种:数字之间的加减运算来实现,第一种加减方式

a=b-a+(b=a);简要说明:这种用法在只用于数字间的交换时,性能也不弱

第十种:利用eval计算

适用性:仅适用于数字和字符串代码如下:

eval("a="+b+";b="+a);简要说明:这种方式仅用于研究,实战慎用

这种模式执行一万次耗时等于其它执行一亿次…

第十一种:数组中,利用splice交换两个元素的位置

适用性:仅适用于数组元素代码如下:

arr[0]=arr.splice(2,1,arr[0])[0];简要说明:这种方式看起来挺优雅的,但实际上性能远远比不上临时变量那种

各种交换方式的性能对比

上述列举了几种方式都有一一做过对比分析,基本上可以得出的结论是:

还是老老实实的用回临时变量交换吧,经典,优雅,而且保证不会出什么幺蛾子

性能对比截图

分析结果1

以下截图中的数据是,在chrome中运行了一亿次后得出的结论(每次运行100万次,一共100个循环,得到的分析结果)可以看出,tmp变量交换最快,trycatch最慢

THE END
1.六种方式实现全局唯一发号器六种方式实现全局唯一发号器 概念 发号器,也就是在系统全局生成绝对唯一的唯一id生成器,比如订单号、流水号等场景。类似于身份证号,它需要保证全局唯一,尤其是在分布式机器中,不同机器不能生成一样的号牌。我们需要通过一些算法或方式实现这个小功能。 雪花算法https://blog.csdn.net/qq_20051535/article/details/120072174
2.JavaScript数组去重的六种方式javascript技巧JavaScript数组去重的六种方式 在平时的前端开发中,常常会遇到数组去重的场景,比如表单校验重复的数据,有重复数据不让提交,或者对后端返回的数据进行去重展示等,同时它也是一道经典的前端JavaScript基础面试题,本期一起来带大家看看去重的各种花样方法,需要的朋友可以参考下https://www.jb51.net/javascript/332618qug.htm
3.六年级数学简便方法(精选11篇)⑤选用适当的方式检查。四.巩固练习 1.用简便方法计算,并说说题中用了什么运算定律? 25(1)4×+4×(2)34×0.25×4 77(3)25×125×4×8(4)1.25×(8+10)2.计算,并说说是怎样简便的? (1)17.15-8.47-1.53(2)4000÷125÷8 3.用简便方法计算,并用字母表示出来。 https://www.360wenmi.com/f/fileb18626bn.html
4.初一上册数学知识点总结①五种运算:加、减、乘、除、乘方 多个数相乘,积的符号由负因数的个数决定,当负因数有奇数个时,积的符号为负;当负因数有偶数个时,积的符号为正。只要有一个数为零,积就为零。 有理数加法法则: 同号两数相加,取相同的符号,并把绝对值相加。 https://www.ruiwen.com/zhishidianzongjie/6282527.html
5.培智学校义务教育课程标准(2016年版)评价方法除了纸笔测试之外,还可运用日常行为观察与记录、问卷调查、面谈、讨论等多种方法。评价结果可以采用多种方式呈现,如:折线图(侧面图)、评语、观察描述、案例分析、成长档案等。 (六)真实反映发展轨迹 教师要找准学生学习和评价的起点,对学生生活语文知识与技能进行全方位、持续性的评价。要注重收集、积累能够https://yun.nxeduyun.com/index.php?r=space/school/theme/content/view&id=794545
6.计算机考点基本逻辑运算"与"运算又称逻辑乘,用符号"."或"∧"来表示。运算规则如下: 0∧0 = 0 0∧1 = 0 1∧0 = 0 1∧1 = 1 即当两个参与运算的数中有一个数为0,则运算结果为0,都为1结果为1 2."或"运算(OR) "或"运算又称逻辑加,用符号"+"或"∨"表示。运算规则如下: https://xue.baidu.com/okam/pages/strategy-tp/index?strategyId=134143511553552&source=natural
7.福建中医药大学微型荧光显微镜成像系统等采购项目附件7.3、获取地点及方式:注册账号后,通过福建省政府采购网上公开信息系统以下载方式获取。 7.4、招标文件售价:0元。 8、投标截止 8.1、投标截止时间:详见招标公告或更正公告,若不一致,以更正公告为准。 8.2、投标人应在投标截止时间前按照福建省政府采购网上公开信息系统设定的操作流程将电子投标文件上传至福建省政府采购http://ccgp-fujian.gov.cn/upload/document/20221208/7d468e241095421fb35fd57f2dbb68bf.html
8.初二数学实数知识点总结3、在实数范围内,加、减、乘、除(除数不能为0)、乘方五种运算畅通无阻,在开方运算中,正实数和0总能进行开方运算,负实数只能开立方,不能开平方, 4、在有理数范围内的运算顺序和运算律在实数范围内仍然适用。 四、实数和数轴的关系 实数和数轴上的点存在着一一对应关系,即:任何一个实数都可以用数轴上的一个https://mip.oh100.com/chuer/1060530.html
9.Python开根号的几种方式六、总结 Python提供了多种方式来计算一个数的平方根,包括使用math模块、**运算符、NumPy库以及自定义函数等。根据具体的应用场景和需求,我们可以选择最适合的方式来执行这一操作。无论是简单的数学计算还是复杂的科学计算任务,Python都能够提供高效且灵活的解决方案。通过掌握这些开根号的方式,我们可以更好地利用Pythonhttps://developer.aliyun.com/article/1490182
10.计算机题库及答案6篇(全文)B 电报、电话、电传等通信方式 C 无线和有线的总称 D 报文的传送 21、你认为最能准确反映计算机主要功能的是(C) A 计算机可以代替人的脑力劳动 B 计算机可以存储大量信息 C 计算机是一种信息处理机 D 计算机可以实现高速度的运算 22、计算机内部信息的表示及存储往往采用二进制形式,采用这种形式的最主要原因是 https://www.99xueshu.com/w/filepxpej0c2.html
11.字节上岸成功,整理一波测试开发岗的基础知识,含答案HTTP有几种请求方式 HTTP1.0 定义了三种请求方法: GET, POST 和HEAD方法。 HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和CONNECT 方法。 GET和POST的区别 GET的参数放在url中,返回服务器拿数据;POST在request div里自带一个参数去服务器拿指定的数据; https://maimai.cn/article/detail?fid=1679089730&efid=YLyF0ejo0qEtjVB1UUE-yw
12.excel函数的七种方法Excel常用函数的使用方法所以尽管一行或者一列中有多个含有文本的单元格,我们也不必担心会参与到求和运算中,影响运算结果。 Ctrl+Q这个快捷键可以快速打开数据分析工具。行和列分别有求和、求平均值、计数、百分比汇总、累计汇总5种,所以共有10种计算方式。 下图是部分省市2015年~2018年GDP数据,现在要按年进行求和,按省份求每年GDP的平均值https://www.scxz.com/wz/39982.html
13.sass基本运算腾讯云开发者社区在Sass中,共有4种数字运算方式:加、减、乘、除。对于这4种运算方式,我们需要注意以下几点: (1)在Sass加法中,数值可以带单位,但是需要运算单位相同,如果不相同则编译不通过; (2)在Sass减法中,数值可以带单位,但是需要运算单位相同,如果不相同则编译不通过; https://cloud.tencent.com/developer/article/2003367