2014-12-19 13 views
2

이 경우 두 개의 객체를 사용하고 두 속성 만 바꾸는 함수를 작성하려고합니다. 그 사람에 대한 내 기능은 다음과 같습니다 :자바 스크립트에서 함수를 사용하여 객체의 두 속성을 바꿔보기

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

그래서 나는 단지 자신의 IQs와 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

을 할 수 (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

이것은 모든 값을 교환하지 않습니다. 지정된 키의 값만 교환합니다. 예 : 스왑 (봅, 조, [ 'iq', 'favoriteColor']); 밥과 조의 IQ와 좋아하는 색깔 만 바꿀 것입니다. – 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 개 개의 값을 참조. 나는 명명 그냥 내가, 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]; 
} 

및 `당신이 변수를 선언하는 (= a.iq + a.favoriteColor을`var에 A : 당신이 인 ECMAScript 6을 사용할 수 있다면, 당신도이 라인에

function Swap(a, b) { 
    [a.iq, b.iq] = [b.iq, a.iq] 
    [a.favoriteColor, b.favoriteColor] = [b.favoriteColor, a.favoriteColor] 
} 
관련 문제