在JavaScript中交换两个对象

时间:2013-04-22 16:09:58

标签: javascript swap

我有以下代码:

MyObject.prototype.doIt = function()
{
     var a = this.obj1;
     var b = this.obj2; 
}

如何交换 this.obj1 this.obj2 的值,以便obj1变为obj2,obj2变为obj1。

!注意:请记住我不使用原始类型。

5 个答案:

答案 0 :(得分:14)

您可以使用这样的简单身份函数交换任意数量的对象或文字,甚至是不同类型的文字:

var swap = function (x){return x};
b = swap(a, a=b);
c = swap(a, a=b, b=c);

这适用于JavaScript,因为即使未声明或使用它们,它也会接受其他参数。分配a=b等在a传递给函数后发生。

答案 1 :(得分:4)

使用临时变量在交换时保存其中一个对象的内容:

var tmp = this.obj1;
this.obj1 = this.obj2;
this.obj2 = tmp;

答案 2 :(得分:2)

您可以轻松地交换属性:

MyObject.prototype.doIt = function()
{
     var a = this.obj1;
     var b = this.obj2;
     this.obj1 = b;
     this.obj2 = a;
}

obj1obj2不是原始类型是无关紧要的。您实际上不需要两个变量:

MyObject.prototype.doIt = function()
{
     var a = this.obj1;
     this.obj1 = this.obj2;
     this.obj2 = a;
}

但是,如果在此代码之外已存在对this.obj1this.obj2的任何引用,则不会交换它们。

就在任何地方(包括现有引用)交换this.obj1this.obj2而言,我认为不能完全完成。您可以删除this.obj1的所有属性(将其保存在某个位置),从this.obj2添加属性,然后对this.obj2执行相同操作。但是,您将无法交换原型,因此对象无法从根本上交换身份。

答案 3 :(得分:1)

我们可以使用销毁对象,如下代码所示:

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

答案 4 :(得分:0)

以下是具体对象的示例,假设您的原始对象是2个div,div1和div2。

交换它们,

var temp1 = div1;
var temp2 = div2;

div1 = temp2;
div2 = temp1;