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

前言

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


1

2

var a = 123;

var b = 456;

交换变量值方案一

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


1

2

3

4

var t;

t = a;

a = b;

b = t;

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

交换变量值方案二

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

比如这个


1

2

3

a += b;

b = a - b;

a -= b;

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


1

2

3

a -= b;

b = a + b;

a = b - a;

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

交换变量值方案三

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


1

2

3

a ^= b;

b ^= a;

a ^= b;

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

不过我们可以这样


1

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

交换变量值方案四

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


1

2

3

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

b = a.b;

a = a.a;

交换变量值方案五

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


1

2

3

a = [a,b];

b = a[0];

a = a[1];

交换变量值方案六

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


1

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

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

交换变量值方案七

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


1

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

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

总结

本文提到了这么多交换变量值的方法,不知道还有没有其他办法,虽然它是一个无关紧要的问题,不过可以练一练我们的脑洞。

时间: 2024-10-24 06:04:15

JavaScript交换两个变量值的七种解决方案的相关文章

不借助第三个变量,交换两个变量值的3种方式

今天在我们学校的OJ上做题,一道非常简单的题,突然想试试能不能不借助第三个变量,交换两个变量值.蒙出来一半了已经,好可惜.现在把方法写在这里,希望以后不要忘记. 1 void fun1() 2 { 3 int a = 10, b = 100; 4 5 a = a + b; 6 b = a - b: 7 a = a - b; 8 printf("%d\n%d\n", a, b); 9 } 10 11 void fun2() 12 { 13 int a = 10, b = 100; 14

201603061528_《Javascript交换两个变量值(不借用第三变量)》

/*================================= @DESC:Exchange two value without third var. @AUTHOR: Not me. @DATE:2016-3-6 15:33 ==================================*/ var a = "Apple"; var b = "Banana"; var a = [b, b = a][0]; alert(a); //Banana

交换两个变量值的几种算法

一.添加临时变量(最常见) var a = 1, b = 2, c; c = a; a = b; b = c; 二.算数运算(仅限number类型) var a = 3, b = 5; a = a - b; // a = -2 , b = 5; b = a + b; // a = -2, b = 3; a = b - a; // a = 5, b = 3; 三.数组特性 var a = 1; b = 2; a = [ a , b ]; b = a[ 0 ]; a = a[ 1 ]; 四.ES6解

C#交换两个变量值的多种写法

在学习.Net/C#或者任何一门面向对象语言的初期,大家都写过交换两个变量值,通常是通过临时变量来实现.本篇使用多种方式实现两个变量值的交换. 假设int x =1; int y = 2;现在交换两个变量的值. 使用临时变量实现 static void Main(string[] args) { int x = 1; int y = 2; Console.WriteLine("x={0},y={1}",x, y); int temp = x; x = y; y = temp; Cons

不使用临时变量 交换两个变量值

不使用临时变量 交换两个变量值1.$a = $a+$b;$b = $a-$b;$a= $a-$b; 2.list($a, $b) = array($b, $a); 3. $a = $a ^ $b;$b = $a ^ $b;$a = $a ^ $b;

PHP交换两个变量值

方法一:交换两个变量的最简单方法是使用第三个临时变量 1 <?php 2 $a = 15; 3 $b = 27; 4 // 交换逻辑 5 echo "<br>交换前的数字为:<br>"; 6 echo "a =".$a." 且 b=".$b; 7 $temp = $a; 8 $a = $b; 9 $b = $temp; 10 echo "<br>交换后的数字为: <br>"

不使用临时变量交换两个变量值

题目:不使用临时变量交换两个变量值 分析:使用加.减.乘.亦或(aba==b),四种方法分别如下: //方法一:利用加法 int Swap3(int *x, int *y) { *x = *x + *y;//*x是二者和 *y = *x - *y;//*y是*x *x = *x - *y;//*x是*y } //方法二:利用减法 int Swap1(int *x, int *y) { *x = *x - *y;//*x是二者差值 *y = *x + *y;//*x是*y *x = *y - *x

如何不利用一个额外的变量来达到交换两个变量值的目的-------位上的异或运算

问题:一般我们要交换两个变量的值,多会采取一个额外变量来实现,比如temp=a,a=b,b=temp,现在我们能不利用temp来实现交换a,b两个变量值的目的吗? 解决方案:^异或运算符,而且我们会发现a^a=0,还有0^a=a,依据这两条理论,我们可以实现之前提出的问题. 代码如下: #include<stdio.h>void inplace_swap(int * x,int * y){    *y=*x^*y;    *x=*x^*y;    *y=*y^*x;}int main(){  

从交换两个变量值看c语言学习历程

在开始你使用这种方法 int tmp; tmp = a; a = b; b = tmp; 后来你知道了模块化编程,你知道这样是不好的,于是你开始使用函数. void swap(int *a, int *b); { int tmp; tmp = *a; *a = *b; *b =tmp; }//下面我就不写函数了 随着c语言的学习,后来你发现下面代码也能完成两变量的值交换的任 x = x +y; y = x -y; x = x -y; 后来有一天,你发现你这段代码不是总能正确工作的,因为x + y