【问题标题】:JavaScript: Swapping string variables without temporary variablesJavaScript:在没有临时变量的情况下交换字符串变量
【发布时间】:2014-09-24 21:30:29
【问题描述】:

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

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

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

【问题讨论】:

  • 假设您可以对两个字符串进行异或运算(当长度不相等时,您必须进行一些补偿)...但是为什么呢?即使交换两个数字,这也是一个不错的技巧,但仅此而已。
  • 这可能会对您有所帮助。 stackoverflow.com/questions/16201656/…
  • @GarrettKadillak 谢谢。那个公认的答案就是哇

标签: javascript


【解决方案1】:

替代交换方法

仅限 ES6

ES6 新的解构赋值语法:

[a, b] = [b, a]

ES5 兼容

有一个通用的单行交换方法,它不涉及创建新的临时变量,并且只使用“on-the-fly”数组,这里是:

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] 运算符产生数组的第一个元素,即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 + "" === bb的旧值被分配给a

性能基准

this page,您可以找到并运行不同交换方法的基准测试。结果当然因浏览器和 JS 引擎版本而异。

【讨论】:

  • 有趣,特别是考虑到通用单行交换方法也能够交换任何两个对象值,而不管它们的性质如何......谢谢!
【解决方案2】:

ES6 解决方案来了

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • Akash,我正在寻找交换两个变量而不是字符串中的两个组件的方法......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多