如何交换在JavaScript中的两个变量(How to swap two variables in

2019-09-01 02:20发布

我有这两个变量:

var a = 1,
    b = 2;

我的问题是如何交换呢? 只有这个变量,而不是任何对象。

Answer 1:

这里有一个一行交换两个变量的值。

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

片段:

 var a=1, b=2, output=document.getElementById('output'); output.innerHTML="<p>Original: "+a+", "+b+"</p>"; b = [a, a = b][0]; output.innerHTML+="<p>Swapped: "+a+", "+b+"</p>"; 
 <div id="output"></div> 



Answer 2:

ES6(Firefox和Chrome已经支持它(解构赋值矩阵匹配)):

 let a = 5, b = 6; [a, b] = [b, a]; console.log(`${a} ${b}`); 



Answer 3:

你可以这样做:

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

对于可读性和可维护性,这不能(在JavaScript中至少)击败。 任何人维护代码(包括你从现在起半年)就会知道到底发生了什么事情。

由于这些都是整数,你也可以使用任意数量的聪明的技巧1至互换,而无需使用第三个变量。 例如,您可以使用按位异或运算符:

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

这就是所谓的XOR交换算法。 它的工作原理中描述这个维基百科文章 。

1“的能力的程序员是完全知道自己的头骨大小的限制。因此,他接近他的任务具有完全谦卑,避免像瘟疫一样聪明的技巧。” - 艾兹赫尔·戴克斯特拉



Answer 4:

不要使用下面的代码。 这是交换两个变量的值的推荐的方法(简单地用一个临时变量为)。 它只是显示了一个JavaScript的伎俩。

该解决方案不使用临时变量,没有数组,只有一此外,它的速度快 。 事实上,这是有时比一个临时变量在几个平台更快
它适用于所有的数字,从来没有溢出,并处理边缘情况下,如无限大和NaN。

a = b + (b=a, 0)

它工作在两个步骤:

  • (b=a, 0)设定b到的旧值a与产率0
  • a = b + 0a到的旧值b


Answer 5:

这里有一个一行,假设ab已经存在,并且具有值需要被交换:

var c=a, a=b, b=c;

如@Kay提到的,这实际上执行大于阵列方式(几乎2倍的速度) 更好



Answer 6:

由于ES6,你也可以交换变量更优雅:

var a = 1,
    b = 2;

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

console.log('a:', a, 'b:', b); // a: 2 b: 1


Answer 7:

使用这样的第三个变量:

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

a = b; // must be first or a and b end up being both 1
b = c;

DEMO -使用第三个变量




Answer 8:

你可以使用一个临时交换变量或XOR。

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

这仅仅是一个基本的逻辑概念,并在支持XOR操作的每一种语言的作品。

编辑:看到评论。 忘了告诉大家,这个工程肯定只能用整数。 假设从问题的线程的整数变量



Answer 9:

ES6 +方法:由于ES6,你可以换变量更优雅。 你可以用解构赋值阵列匹配。 这是简单的。 VAR A = 10 B = 20;

[A,B] = [B,A]

的console.log(A,B)// 20 10



Answer 10:

至于你的问题是珍贵的。“仅此变量,而不是任何对象”,答案也将珍贵的:

有A = 1,B = 2

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

这是一招

随着罗德里戈阿西斯说,它“可以短”

 b=a+(a=b)-b;

演示: http://jsfiddle.net/abdennour/2jJQ2/



Answer 11:

现在,您终于可以这样做:

 var a = 5; var b = 10; [a, b] = [b, a]; // ES6 console.log(a, b); 



Answer 12:

ES6解构:

使用阵列: [a, b] = [b, a]; // my favorite [a, b] = [b, a]; // my favorite

使用对象{a, b} = {a:b, b:a}; // not bad neither {a, b} = {a:b, b:a}; // not bad neither



Answer 13:

我们怎么能错过这些经典oneliners

var a = 1, b = 2
a = ({a:b, _:(b=a)}).a;

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

最后一个公开的全局变量“_”,但作为典型的JavaScript的惯例是把它作为“不关心”的变量,不应该的问题。



Answer 14:

单行交换

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


Answer 15:

var a = 5;
var b = 10;

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

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


alert("a=" + a + ',' + "b=" + b);

删除或注释2家//或公司,并与一组代码运行

http://jsfiddle.net/USdv8/57/



Answer 16:

在ES6现在有解构赋值,你可以这样做:

let a = 1;
let b = 2;
[b, a] = [a, b]  // a = 2, b = 1


Answer 17:

我看到那种这里编程竞赛。 还有一个棘手的一个在线的解决方案:

b = (function(){ a=b; return arguments[0]; })(a);

小提琴: http://jsfiddle.net/cherniv/4q226/



Answer 18:

我们能够交换VAR是这样的:

var val1 =  117,
    val2 = 327;

val2 = val1-val2; 
console.log(val2);
val1 = val1-val2;
console.log(val1);
val2 = val1+val2;
console.log(val2);


Answer 19:

let a = 2, b = 4;
[b, a] = [a, b];

一个更详细的方法是

let a = 2, b = 4;
a = [a, b];
b = a[0];
a = a[1];


Answer 20:

这是非常简单的,使用ES6阵列解构语法其是[y, x] = [x, y]以获取更多信息请参阅本链接https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference /运营/ Destructuring_assignment



Answer 21:

(功能(A,B){B = A; A = B;})(parseInt函数(a)中,parseInt函数(B));



文章来源: How to swap two variables in JavaScript