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

Swapping two properties of objects with function in javascript

本文关键字:属性 两个 对象 javascript 函数 交换      更新时间:2023-09-26

我正在尝试编写一个函数,该函数将接受两个对象,在本例中为人,并且仅交换其两个属性。这是我对人的函数:

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);
}
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 个值。我希望命名有助于更好地理解,而不仅仅是 i,j :D

如果我们采用此解决方案来交换值...

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

。我们可以这样做...

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]
}
这将在

对象 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;
    }
}