在javascript中使用函数交换对象的两个属性

在javascript中使用函数交换对象的两个属性,javascript,jquery,function,object,Javascript,Jquery,Function,Object,我正在尝试编写一个函数,它将接受两个对象,在本例中是人,并且只交换他们的两个属性。以下是我对此人的职责: function Person (tall, weight, gender, iq, favoriteColor) { this.tall = tall; this.weight = weight; this.gender = gender; this.iq = iq; this.favoriteColor = favoriteColor; } var joe = ne

我正在尝试编写一个函数,它将接受两个对象,在本例中是人,并且只交换他们的两个属性。以下是我对此人的职责:

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");
所以我只想交换他们的智商和喜欢的颜色

到目前为止,我已经:

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.
从技术上讲,它交换了这两个值,但它们作为对象的结构消失了,它们原本应该保留的其他三个属性也消失了。如何编写交换函数来实现这一点


谢谢

这就是你想要的。您需要交换各个字段。你不能像现在这样添加它们。另外,最好不要对已经声明的变量使用相同的名称,这太令人困惑了

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

这将在对象a和b之间交换键数组中键的所有值:

function Swap(a,b, keys){
    for(var i=0; i<keys.length; i++){
        var currentKey = keys[i];
        var temp = a[currentKey];
        a[currentKey] = b[currentKey];
        b[currentKey] = temp;
    }
}
功能交换(a、b、键){
对于(var i=0;i
这里您可以看到所需的4个值。我希望命名有助于更好地理解I,j:D

如果我们采用

…我们可以这样做

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]
}

在这行:
var a=a.iq+a.favoriteColor;
您声明的变量(函数的本地)只有两个值(iq+favoriteColor)并记录它。注意,这与传递给参数的变量不同。更好的做法是调用其他变量(与
var b…。
)在这种情况下,键可以作为数组
交换(joe,bob,['iq',favoriteColor'])
传入。这使函数更加灵活和有用。这不会交换所有值。它只交换指定键的值。例如,交换(bob,joe,['iq',favoriteColor']);将只交换bob和joe的智商和最喜欢的颜色。谢谢!!这很有效,很有意义。非常感谢appreciated@Brandon没问题。很高兴我能帮忙。
function Swap(a, b) {
    b.iq = [a.iq, a.iq = b.iq][0];
    b.favoriteColor = [a.favoriteColor, a.favoriteColor = b.favoriteColor][0];
}
function Swap(a, b) {
    [a.iq, b.iq] = [b.iq, a.iq]
    [a.favoriteColor, b.favoriteColor] = [b.favoriteColor, a.favoriteColor]
}