2014-12-19 64 views
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。

到目前爲止,我有:

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. 

技術上講,它調換了兩個值,但其作爲一個對象結構已不復存在,他們應該到其他三個屬性保持自己的也不見了。如何編寫交換功能來做到這一點?

謝謝!

+1

關於這一行:'var a = a.iq + a.favoriteColor;'你聲明一個變量(本地函數)只有兩個值(iq + favoriteColor)並記錄它。請注意,這與傳入的參數不同。更好的做法是將其稱爲別的東西(同樣適用於'var b ...') – ochi

回答

3

這就是你想要的。您需要交換個別字段。你不能像你在做的那樣添加它們。另外,最好不要對已經聲明的變量使用相同的名稱,這太容易混淆了。

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

謝謝!這工作,並非常有意義。非常感謝 – Brandon

+0

@Brandon沒問題。很高興我能幫上忙。 – imtheman

0

這將交換用於鍵的所有值中的對象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; 
    } 
} 
+2

在這種情況下,可以將鍵作爲數組'Swap(joe,bob,['iq','favoriteColor'])''傳入。這使得該功能更加靈活和有用。 – musicfuel

+1

這不會交換所有值。它只交換指定鍵的值。例如。 Swap(bob,joe,['iq','favoriteColor']);只會交換鮑勃和喬的智商和喜歡的顏色。 – ateich

1
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

1

如果我們把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] 
} 
相關問題