【问题标题】:javascript function to swap two variablesjavascript函数交换两个变量
【发布时间】:2016-05-10 20:33:16
【问题描述】:
function swap(x,y){
  var t=x;
  x=y;
  y=t;
}

这行不通。当您将swap(a,b)、变量ab 复制到函数中时,该函数中发生的任何事情都不会影响ab 的实际值。我想要这样的东西:

 (function(){
 a=1;
 b=2;
 function swap(){//something}
 swap(a,b);
 console.log(a) //2
 console.log(b) //1
 })()

如何做到这一点?

【问题讨论】:

标签: javascript algorithm function swap


【解决方案1】:

如果您使用的是最新版本的 JavaScript (ES2015),那么您可以使用称为“解构”的新语言功能。你不需要一个函数。它看起来像这样:

let a = 1;
let b = 2;

// swap!
[b, a] = [a, b];

如果你想要一个函数,你可以这样做:

function swap(a, b) {
  return [b, a]
}

[a, b] = swap(a, b);

看这段代码,我有点喜欢这个函数,虽然它有点多余。我喜欢它的表现力。您不会对代码的作用感到困惑。

【讨论】:

    【解决方案2】:

    你不能。参数是passed by value,即使是对象也是如此。只是为它们传递的值是对对象的引用。

    基本上这意味着您收到的任何参数都与您传入的原始变量没有实际联系,除非它们可能共享一个引用。

    假设您在一张纸上写下了ab。在 JS 中,与函数共享这些值的唯一方法是将它们复制到 不同的 纸上并将其交给函数。因此,即使该函数在新纸上划掉了a 并用b 替换它,它也不会改变您在原始纸上写的内容。

    简而言之,不能更改用作函数参数的变量的值。

    【讨论】:

      【解决方案3】:

      如上面的答案所述,参数仅按值传递。如果确实需要实现swap,可以使用2变量算法:

      var a = 10, b = 20;
      a = a + b;
      b = a - b;
      a = a - b;
      console.log (a+" "+b); // 20 10
      

      【讨论】:

        【解决方案4】:

        你可以在函数范围之外设置一个变量,这样你就可以在函数内部使用它,这是你可以做的:

        <head>
        <script>var x=0, y=1;</script>
        </head>
        
        <script>
        function swap()
        {
          var t = x;
          x = y;
          y = t;
        } 
        </script>
        

        甚至这也有效

        <script>
        var x=0; y=1;
        function swap(id1, id2)
        {
          var t = x;
          x = y;
          y = t;
        } 
        console.log(x+"  "+y);
        </script>
        

        我经常使用它并且工作正常。 xy 可以从任何地方获取,并且可以在函数内工作没有问题。 你也可以这样做

        function(id1, id2)
        {
          x=document.getElementById(id1);
          y=document.getElementById(id2);
        
          var t = x.value;
          x.value = y.value;
          y.value = t;
        
        }
        

        【讨论】:

        • 唯一的问题是你只能交换这两个变量。它不允许您交换任何其他变量。
        • 您到底需要什么?您可以将 x 和 y 设置为任何值。您可以使用值设置隐藏输入或将所需的数据保存在数组中,但是将值传递给函数并对其进行更改是不可能的。检查我的编辑
        • 我的意思是说我想在某一点交换xy,然后在另一点交换wz。这个功能不允许我这样做。我只能交换这两个变量而不是两个任意变量。
        • 就像我说的,你只能解决它..你从哪里得到 x y 和 z 数据?您可以在实际的 HTML 中实现它们的值,例如在数组中或在&lt;option value="VAL"&gt; 属性中,如果您使用&lt;select&gt;,则可以将它们放在&lt;input type="hidden" value="VAL"&gt; 中,您只能解决它。那些x,y,z 来自某个地方,只需通过将参数传递给说明它们位置的函数来直接获取它们。就像传递元素的 ID 或它们在数组中的位置。
        • 如果您能证明有关实际问题的更多信息,那么我可以帮助您解决问题,但尝试按照您询问的方式进行操作是行不通的。
        【解决方案5】:
        function swap(value) {
            value.first = value.first + value.second;
            value.second = value.first - value.second;
            value.first = value.first - value.second; 
        }
        
        // declared an object named value which has two keys - first and second corresponding to the first and the second values respectively
        
        var value = {
            first: 1,
            second: 2
        }
        
        console.log(value.first, value.second) // prints 1 2
        swap(value);
        console.log(value.first, value.second); // prints 2 1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-04-18
          • 1970-01-01
          • 2020-11-17
          • 1970-01-01
          • 2014-02-01
          • 2017-11-10
          • 1970-01-01
          相关资源
          最近更新 更多