JavaScript交换两个变量值的七种解决方案


Posted in Javascript onDecember 01, 2016

前言

这篇文章总结了七种办法来交换a和b的变量值

var a = 123;
var b = 456;

交换变量值方案一

最最最简单的办法就是使用一个临时变量了,不过使用临时变量的方法实在是太low了

var t;
t = a;
a = b;
b = t;

首先把a的值存储到临时变量中,然后b赋值给a,最后拿出临时变量中的a值赋给b,这个办法是最基本的了

交换变量值方案二

下面的方案都不会有临时变量,我总结了一下,其实不使用临时变量的思路都是让其中一个变量变成一个a和b都有关系的值,这样可以先改变另一个变量值, 最后改变原修改的变量值

比如这个

a += b;
b = a - b;
a -= b;

让a先变成a与b的‘和'(也可以换成a和b的差,一样的) ,‘和'减去b巧妙的得到了a的变量值赋予b ,再通过‘和'减去a的值得到了b的值赋予a,或者是下面的变式(差的形式)

a -= b;
b = a + b;
a = b - a;

但是感觉和的形式更容易理解

交换变量值方案三

这种方法对于第一次学习JavaScript的同学来说可能不了解,因为我们JavaScript很少会用到位操作,这是我在以前看算法竞赛书的时候学来的,通过底层位运算来进行交换变量值,也是上面的方案演化来的

a ^= b;
b ^= a;
a ^= b;

了解一下吧,C++甚至可以a^=b^=a^=b来完成任务,但我发现JavaScript不可以

不过我们可以这样

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

交换变量值方案四

把a先变成了一个对象,这个对象保存着应该交换后的键值对,最后赋值搞定

a = {a:b,b:a};
b = a.b;
a = a.a;

交换变量值方案五

和上面的方法很像,只不过对象换成了数组

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

交换变量值方案六

这个办法十分的巧妙,不是我想出来的,想出来的人一定是大神,除非他是托梦想出来的,简单粗暴一行代码交换了a和b的变量值

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

根据运算符优先级,首先执行b=a,此时的b直接得到了a的变量值,然后一步数组索引让a得到了b的值(简直不能再厉害)

交换变量值方案七

最后我的方案是利用了ES6的解构赋值语法,它允许我们提取数组和对象的值,对变量进行赋值,不过我现在测试用的chrome浏览器已经实现了

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

可以看到解构赋值语法让我们的交换变量值变得超级简单,这个解构赋值语法要是讲的话要讲很多不是今天的重点,以后会在再总结现在就不讲了

总结

本文提到了这么多交换变量值的方法,不知道还有没有其他办法,虽然它是一个无关紧要的问题,不过可以练一练我们的脑洞。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
同一个表单 根据要求递交到不同页面的实现方法小结
Aug 05 Javascript
json格式化/压缩工具 Chrome插件扩展版
May 25 Javascript
jQuery动态添加的元素绑定事件处理函数代码
Aug 02 Javascript
JavaScript函数详解
Feb 27 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
H5上传本地图片并预览功能
May 08 Javascript
基于滚动条位置判断的简单实例
Dec 14 Javascript
《javascript少儿编程》location术语总结
May 27 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
Dec 29 jQuery
详解mpvue中小程序自定义导航组件开发指南
Feb 11 Javascript
详解简单易懂的 ES6 Iterators 指南和示例
Sep 24 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
Dec 25 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
Dec 01 #Javascript
实例解析jQuery工具函数
Dec 01 #Javascript
Vue.js实现简单ToDoList 前期准备(一)
Dec 01 #Javascript
获取jqGrid中选择的行的数据
Nov 30 #Javascript
基于Vue.js实现简单搜索框
Mar 26 #Javascript
深入理解jQuery.data() 的实现方式
Nov 30 #Javascript
利用vue-router实现二级菜单内容转换
Nov 30 #Javascript
You might like
PHP 柱状图实现代码
2009/12/04 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
深入理解Javascript闭包 新手版
2010/12/28 Javascript
JS和JQUERY获取页面大小,滚动条位置,元素位置(示例代码)
2013/12/14 Javascript
解读Bootstrap v4 sass设计
2016/05/29 Javascript
jQuery原理系列-css选择器的简单实现
2016/06/07 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
详解ajax的data参数错误导致页面崩溃
2018/04/30 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
小程序自定义圆形进度条
2020/11/17 Javascript
[40:03]RNG vs VG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中List.count()方法的使用教程
2015/05/20 Python
python中正则的使用指南
2016/12/04 Python
Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)
2017/05/08 Python
Python2/3中urllib库的一些常见用法
2017/12/19 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
python视频按帧截取图片工具
2019/07/23 Python
python 使用pdfminer3k 读取PDF文档的例子
2019/08/27 Python
巴西最大的家具及装饰用品店:Mobly
2017/10/11 全球购物
自荐信需注意事项
2014/01/25 职场文书
西门豹教学反思
2014/02/04 职场文书
歌唱比赛主持词
2014/03/18 职场文书
美国留学经济担保书
2014/05/20 职场文书
保护环境的宣传语
2015/07/13 职场文书
公司劳动纪律管理制度
2015/08/04 职场文书
go mod 安装依赖 unkown revision问题的解决方案
2021/05/06 Golang
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
Java基础——Map集合
2022/04/01 Java/Android