JavaScript:交换没有临时变量的字符串变量

时间:2014-09-24 21:30:30

标签: javascript

我知道在JavaScript中可以使用XOR选项交换两个整数值,从而无需临时变量:

a = 14; b = 27; a^=b; b^=a; a^=b;
// a == 27 and b == 14

但是在JavaScript中是否有类似的非临时技术来交换字符串?

3 个答案:

答案 0 :(得分:10)

替代交换方法

通用单行交换方法不涉及创建新的临时变量,只使用“动态”数组,这里是:

var a = "world", b = "hello";
b = [a, a = b][0];

console.log(a, b); // Hello world

说明:

  • a=bb的旧值分配给a并向其致谢,因此[a, a=b]将为[a, b]
  • [0]运算符yelds数组的第一个元素a,所以现在b = [a,b][0]变为b = a

然后,仅限字符串,您也可以这样做:

var a = "world", b = "hello";
a = b + (b = a, "");

console.log(a, b); // Hello world

如果您想使用数字执行此操作,则可以将""替换为0

说明:

  • (b = a, "")a的旧值分配给b,并将字符串称为空字符串
  • 现在您拥有a = b + "",自b + "" === b起,b的旧值已分配给a

运行时间

this page ,您可以找到最常见的交换方法的有趣速度测试。结果显而易见:数组方法是最弱的,因为创建数组会导致引擎执行比仅使用表达式或按位运算符或新变量更低级别的操作。

如果您不想打开链接,可以使用以下屏幕截图: test graph

答案 1 :(得分:1)

这是ES6解决方案

我们可以做Destructuring Assignment并像老板一样交换。

var a = "Hello", b = "World!";
console.log(a, b); // Hello World!
[a, b] = [b, a]; //
console.log(a, b); // World! Hello

答案 2 :(得分:-1)

我们可以使用字符串replace()方法来实现!

通过使用正则表达式:“ /(\ w +)\ s(\ w +)/”

const name = "Akash Barsagadey";
const swapName = name.replace(/(\w+)\s(\w+)/, "$2 $1");

console.log(swapName); //Barsagadey Akash