在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);