Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中交换对象变量而不使用第三个变量_Javascript - Fatal编程技术网

在Javascript中交换对象变量而不使用第三个变量

在Javascript中交换对象变量而不使用第三个变量,javascript,Javascript,有一种众所周知的方法可以交换两个数值变量,而不使用第三个变量进行简单的算术运算 a = 3; b = 5; b += a; a = b - a; b -= a; console.log(a); //5 console.log(b); //3 这里不神秘。但我需要交换两个对象变量,我不知道如何处理这个问题 对象非常复杂,具有不同数据类型和方法的属性。下面是一个简化示例: a = { label: "xxxxxxx", active: false, doThatThang: funct

有一种众所周知的方法可以交换两个数值变量,而不使用第三个变量进行简单的算术运算

a = 3;
b = 5;
b += a;
a = b - a;
b -= a;
console.log(a); //5
console.log(b); //3
这里不神秘。但我需要交换两个对象变量,我不知道如何处理这个问题

对象非常复杂,具有不同数据类型和方法的属性。下面是一个简化示例:

a = {
  label: "xxxxxxx",
  active: false,
  doThatThang: function(val) {
    //some code
  }
};

我目前正在使用第三个变量来执行交换,但对象非常大,这会干扰变量交换值的动画。

交换对象时使用第三个变量。在ES5中,没有比这更简单的方法

var first={property:'value'}
var second={more:'stuff'}
console.log('Before')
console.log(第一个)
console.log(秒)
变量温度=第一
第一=第二
秒=温度
console.log('After')
console.log(第一个)
console.log(秒)
假设a=3,b=5。 然后

现在不使用第三个变量就可以交换这些变量。

var a=1,
var a=1,
b=2,
output=document.getElementById('output');
output.innerHTML="<p>Original: "+a+", "+b+"</p>";
b = [a, a = b][0];
output.innerHTML+="<p>Swapped: "+a+", "+b+"</p>";

<div id="output"></div> 
b=2, output=document.getElementById('output'); output.innerHTML=“原件:“+a+”、“+b+”

”; b=[a,a=b][0]; output.innerHTML+=“交换:“+a+”、“+b+”

”;
使用ES6数组分解

let a = 1;
let b = 2;

[a, b] = [b, a];

console.log(a);
console.log(b);
参考:试试ES6

演示

a={
标签:“111111”,
活动:错误,
dothattang:函数(val){
//一些代码
}
};
设b={
标签:“2222222”,
活动:错误,
dothattang:函数(val){
//一些代码
}
};
控制台日志(“交换前”);
控制台日志(a);
控制台日志(b);
[a,b]=[b,a];
控制台日志(“交换后”);
控制台日志(a);

控制台日志(b)必须使用第三个变量。对象的大小不应该相关,因为您只交换引用。您需要第三个变量来交换两个对象,因为在将对象分配给变量时,您可能会得到类型不匹配错误。@4当我执行交换时,动画变得混乱。一旦我移除它,它就会顺利工作。听起来你的问题在于你的动画和交换。。。不是因为第三个变量。你为什么要使用你在数字上显示的方法?使用第三个变量更容易理解,因此更易于维护。(在任何情况下,对于较新版本的JS,您都可以执行
[a,b]=[b,a]
)请阅读问题。似乎你没有通过标题,甚至连这也不能确定。它的任务是使用对象类型中的第三个变量来交换这些。这不是与问题中已经显示的算法完全相同吗(除了将
a
b
反转,并且没有快捷方式
+=
-=
操作符)a和b不一定是数字,也不一定是同一类型什么是
b=[a,a=b][0]?他到底做什么?为什么它会起作用呢?交换两个变量的值是一个线性过程。当你的方法解决了我的问题(动画不再“闪烁”)时,解释解决方案会很好。我真的很好奇。从技术上讲,这是在创建第三个变量;它只是在同一行中创建和处理它。:)@因为某种原因,它解决了这个问题。可能是因为第三个变量是在内置进程上创建的。没有更简单的方法可以做到这一点。-<代码>[first,second]=[second,first]
对我来说似乎更简单。(我知道旧浏览器不支持它…)我期待着有一天我们可以假设JavaScript意味着ES6。
let a = 1;
let b = 2;

[a, b] = [b, a];

console.log(a);
console.log(b);