我正在尝试编写一个函数,它将接受两个对象(在本例中为人员),并且只交换它们的两个属性。这是我对这个人的职责:
function Person (tall, weight, gender, iq, favoriteColor) {
this.tall = tall;
this.weight = weight;
this.gender = gender;
this.iq = iq;
this.favoriteColor = favoriteColor;
}
var joe = new Person("6-2", 180, "male", 130, "blue");
var bob = new Person("5-11", 150, "male", 120, "red");所以我只想交换他们的智商和favoriteColor。
到目前为止,我已经:
function Swap(a, b) {
var i = a;
a = b;
b = i;
console.log(a, b);
}这显然会交换它们的所有属性,但我不知道如何只交换两个属性,并且仍然让它们作为对象进行日志记录。我试过:
function Swap(a, b) {
var a = a.iq + a.favoriteColor;
var b = b.iq + b.favoriteColor;
var i = a;
a = b;
b = i;
console.log(a, b);
}但这将在控制台中返回:
120red 130blue.从技术上讲,它交换了这两个值,但是它们作为一个对象的结构已经消失了,它们应该保留的其他三个属性也消失了。如何编写交换函数来完成此操作?
谢谢!
发布于 2014-12-19 22:00:41
这就是你想要的。您需要交换各个字段。你不能像你正在做的那样添加它们。另外,最好不要对已经声明的变量使用相同的名称,这太让人费解了。
function Swap(a, b) {
var i = a.iq;
a.iq = b.iq;
b.iq = i;
i = a.favoriteColor;
a.favoriteColor= b.favoriteColor;
b.favoriteColor = i;
console.log(a, b);
}发布于 2014-12-19 22:04:10
function Swap(a, b) {
var newBIq = a.iq
var newBColor = a.favoriteColor;
var newAIq = b.iq
var newAColor = b.favoriteColor;
a.iq = newAIq;
a.favoriteColor = newAColor;
b.iq = newBIq;
b.favoriteColor = newBColor
console.log(a, b);
}在这里,您可以看到所需的4个值。我希望这个名字能帮助你更好地理解我,j :D
发布于 2014-12-19 22:10:06
如果我们带着this solution to swap values..。
b = [a, a = b][0];...we可以这么做..。
function Swap(a, b) {
b.iq = [a.iq, a.iq = b.iq][0];
b.favoriteColor = [a.favoriteColor, a.favoriteColor = b.favoriteColor][0];
}如果你可以使用ECMAScript 6,你甚至可以
function Swap(a, b) {
[a.iq, b.iq] = [b.iq, a.iq]
[a.favoriteColor, b.favoriteColor] = [b.favoriteColor, a.favoriteColor]
}https://stackoverflow.com/questions/27574428
复制相似问题