【问题标题】:Swapping two properties of objects with function in javascript在javascript中用函数交换对象的两个属性
【发布时间】:2014-12-19 21:54:30
【问题描述】:

我正在尝试编写一个函数,它将接受两个对象,在这种情况下是人,并且只交换它们的两个属性。这是我的 Person 函数:

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.

从技术上讲,它交换了这两个值,但是它们作为对象的结构已经消失了,并且它们本应保留的其他三个属性也消失了。如何编写交换函数来做到这一点?

谢谢!

【问题讨论】:

  • 在这一行:var a = a.iq + a.favoriteColor; 您正在声明一个只有两个值(iq + favoriteColor)的变量(函数的本地变量)并记录它。请注意,这与作为参数传入的变量不同。更好的做法是将其称为其他名称(var b... 同上)

标签: javascript jquery function object


【解决方案1】:

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

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

【讨论】:

  • 谢谢!!这很有效并且非常有意义。非常感谢
  • @Brandon 没问题。很高兴我能帮上忙。
【解决方案2】:
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

【讨论】:

    【解决方案3】:

    如果我们采取this solution to swap values...

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

    【讨论】:

      【解决方案4】:

      这将交换对象 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;
          }
      }
      

      【讨论】:

      • 在这种情况下,键可以作为数组Swap(joe, bob, ['iq', 'favoriteColor']) 传入。这使得函数更加灵活和有用。
      • 这不会交换所有值。它只交换指定键的值。例如。交换(鲍勃,乔,['iq','favoriteColor']);只会交换鲍勃和乔的智商和最喜欢的颜色。
      猜你喜欢
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多