js 解决两值交换
总结七种办法来交换a和b的变量值
交换变量值方案一
最最最简单的办法就是使用一个临时变量了
不过使用临时变量的方法实在是太low了
var t;
t = a;
a = b;
b = t;
首先把a的值存储到临时变量中
然后b赋值给a
最后拿出临时变量中的a值赋给b
这个办法是最基本的了
交换变量值方案二
下面的方案都不会有临时变量
我总结了一下
其实不使用临时变量的思路都是让其中一个变量变成一个a和b都有关系的值
这样可以先改变另一个变量值,
最后改变原修改的变量值
比如这个
a = a + b;
b = a - b;
a = a - b;
让a先变成a与b的‘和’(也可以换成a和b的差,一样的)
‘和’减去b巧妙的得到了a的变量值赋予b
再通过‘和’减去a的值得到了b的值赋予a
或者是下面的变式(差的形式)
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的解构赋值语法
它允许我们提取数组和对象的值,对变量进行赋值
(旧版本浏览器不能使用ES6语法)
[a,b] = [b,a];
js 解决两值交换的更多相关文章
- C#语言————两值交换
//两值交换 public static void Show(ref int num1,ref int num2) { int num=num1; num1=num2; num2=num; } sta ...
- js计算两个日期的天数差值
js计算两个日期的天数差值 通过两个日期计算这两个日期之间的天数差值 /** * 计算天数差的函数,通用 * @param sDate1 * @param sDate2 * @returns {Num ...
- c#记两个变量进行值交换
今天腊月二十九啦,无心上班,专注划水.然后就在那里翻帖子消磨时光. 看到了这样一个问题,有人提问为什么 a=b+(b=a)*0 ??? 第一眼看上去,我也有点蒙,仔细推敲了一下,嗯~的确是交换了 ...
- JS杂技之无中间变量的值交换方式
从http://www.cnblogs.com/liuyitian/p/4081517.html#3074553看到一种无中间变量的值交换方式,具体如下: var a = 1;var b = 2;a ...
- JS解决通过按钮切换图片的问题
我是JS初学者,本想通过JS解决轮播图的特效,上网看了下:大部分都是JQ解决的,对于初学者的我来说理解上有点困难.于是我自己只做了一个不那么高大上的JS轮播图,下面我简单介绍下我的步骤:在HTML中创 ...
- Data层相关问题 & JS循环取值
第一次写博客,里面是自己工作中碰到的问题及总结的知识点,便于自己以后回顾,技术大牛们请直接忽略这篇文章,也希望能帮助到想我这样的小白! Data层相关问题总结: 1. 代码管理用的是 VSS 2005 ...
- html与js的取值,赋值
-------------------------------------------------- ------------------------------------------------- ...
- MyEclipse取消验证Js的两种方法
MyEclipse取消验证Js的两种方法 作者: 字体:[增加 减小] 类型:转载 通过js写一个web工程的相关页面时感觉很卡,修改内存也不行下面有两种解决方法,大家可以尝试下 前言:有时我们通过j ...
- (转)JS保留两位小数 四舍五入函数
本文转载自:http://www.cnblogs.com/446557021/archive/2011/10/13/2211047.html js 四舍五入函数 toFixed(),里面的参数 就是保 ...
随机推荐
- Python input保证输入为int类型
t = float(input("t(℃)="))
- Java数组协变与范型不变性
变性是OOP语言不变的大坑,Java的数组协变就是其中的一口老坑.因为最近踩到了,便做一个记录.顺便也提一下范型的变性. 解释数组协变之前,先明确三个相关的概念,协变.不变和逆变. 一.协变.不变.逆 ...
- SAMBA服务和FTP服务讲解(week3_day1)--技术流ken
samba服务 Smb主要作为网络通信协议; Smb是基于cs架构: 完成Linux与windows之间的共享:linux与linux之间共享用NFS 第一步:安装samba [root@ken ~] ...
- 在嵌入式设备中使用 JavaScript 的前景
by Conmajia PC上的JavaScript已经发展到ECMAScript 6(ES6),马上ES10都快出来了(虽然还是草案),但是硬件上的JS却很少听说.这几年手持设备/可穿戴设备的发展非 ...
- 【转】Redis一般会遇到的问题以及解析
单线程的 Redis 为什么这么快 这个问题是对 Redis 内部机制的一个考察.根据我的面试经验,很多人都不知道Redis 是单线程工作模型.所以,这个问题还是应该要复习一下的. 回答主要是以下三点 ...
- python中的zip()函数和map()函数
一.zip()函数 1.语法: zip(iterable, ...) 参数说明: iterable,...-- 一个或多个迭代器; 在python2中: zip() 函数用于将可迭代的对象作为参数,将 ...
- Nginx支持 React browser router
修改nginx配置文件,添加try_file配置如下,即可实现对 React browser router 的支持. location / { root /var/www/mysite; try_fi ...
- SQL运维
1.碎片扫描 dbcc showconfig('table_name')
- Oracle dblink的连接模式的关系测试总结
这篇主要介绍一下database link由于连接数据库的方式不同遇到的一些问题,我们知道连接ORACLE服务器的模式一般有两种方式:专用服务器连接(dedicated server)和共享服务器连接 ...
- selenium-webdriver的二次封装(十)
接着上篇随笔 selenium-配置文件定位元素 ,进行了配置文件设置后,将配置文件运用到定位元素中 思路:拿到定位的 key 和 value 后,对 webdrvier 中定位进行封装,使可以直接运 ...