在 JavaScript 中交换两个对象

问题描述 投票:0回答:5

我有以下代码:

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

如何交换 this.obj1this.obj2 的值,使 obj1 变为 obj2,obj2 变为 obj1。

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

javascript swap
5个回答
17
投票

您可以使用如下简单的标识函数交换任意数量的对象或文字,甚至是不同类型的对象或文字:

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

这在 JavaScript 中有效,因为它接受额外的参数,即使它们没有声明或使用。 赋值

a=b
等发生在
a
传递到函数之后。


6
投票

我们可以使用关于破坏对象,如下面的代码:

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

4
投票

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

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

2
投票

您可以轻松地交换属性:

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

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

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

但是,如果在此代码之外已经存在对

this.obj1
this.obj2
的任何引用,则它们不会被交换。

就到处交换

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


0
投票

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

交换它们:

var temp1 = div1;
var temp2 = div2;

div1 = temp2;
div2 = temp1;
© www.soinside.com 2019 - 2024. All rights reserved.