首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中用函数交换对象的两个属性

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

Stack Overflow用户
提问于 2014-12-19 21:54:30
回答 4查看 947关注 0票数 2

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

代码语言:javascript
复制
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。

到目前为止,我已经:

代码语言:javascript
复制
function Swap(a, b) {
  var i = a;
  a = b;
  b = i;
  console.log(a, b);
}

这显然会交换它们的所有属性,但我不知道如何只交换两个属性,并且仍然让它们作为对象进行日志记录。我试过:

代码语言:javascript
复制
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);
}

但这将在控制台中返回:

代码语言:javascript
复制
120red 130blue.

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

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-12-19 22:00:41

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

代码语言:javascript
复制
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);
}
票数 3
EN

Stack Overflow用户

发布于 2014-12-19 22:04:10

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2014-12-19 22:10:06

如果我们带着this solution to swap values..。

代码语言:javascript
复制
b = [a, a = b][0];

...we可以这么做..。

代码语言:javascript
复制
function Swap(a, b) {
    b.iq = [a.iq, a.iq = b.iq][0];
    b.favoriteColor = [a.favoriteColor, a.favoriteColor = b.favoriteColor][0];
}

如果你可以使用ECMAScript 6,你甚至可以

代码语言:javascript
复制
function Swap(a, b) {
    [a.iq, b.iq] = [b.iq, a.iq]
    [a.favoriteColor, b.favoriteColor] = [b.favoriteColor, a.favoriteColor]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27574428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档