在 javascript 中用函数交换对象的两个属性
Swapping two properties of objects with function in 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");
所以我想交换他们的智商和最喜欢的颜色。
到目前为止,我有:
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;
}
}
相关文章:
- 检查来自不同数组的两个元素的一个属性是否相等
- 交换对象上两个属性的值
- 删除两个独立对象中的属性,而不使用多余的删除语句
- JavaScript - 合并两个对象数组并根据属性值删除重复数据
- 比较主干中的两个模型属性
- 速度.js动画两个属性时持续时间不同
- 查找/合并具有共同属性的两个对象
- JQuery选择:两个属性's值不相等
- 在ramda.js中将两个属性合并在一起
- 有没有一个lodash函数可以合并两个对象并删除其中一个对象的属性(如果它们没有)'不存在于另一个中
- JS:两个或多个非严格模式下具有相同名称的对象属性
- 如何在 JavaScript 中检查多个对象属性两次
- jQuery 选择器,用于通过比较元素的两个数据属性来选择元素
- 为什么我的 Javascript 中的两个正则表达式文本在一个属性上有所不同
- 两个 JavaScript 对象具有相同的属性实现方式,但原型不同
- JavaScript 中通过公共属性“交叉”两个 JSON 对象数组的最佳方式
- 如何在培根中合并两个属性.js
- 如何根据两个对象属性对对象数组进行排序
- 基于两个属性从 javascript 中的对象数组中获取唯一数组
- 如何连接数组中对象的两个属性以用作ngOptions中的标签