source

JavaScript에서 두 변수를 스왑하는 방법

factcode 2022. 10. 13. 23:36
반응형

JavaScript에서 두 변수를 스왑하는 방법

다음 두 가지 변수가 있습니다.

var a = 1,
    b = 2;

제 질문은 어떻게 그것들을 교환하느냐는 것입니다.개체는 제외하고 이 변수만 해당됩니다.

여기 두 변수의 값을 바꿀 수 있는 한 줄입니다.
주어진 변수a그리고.b:

b = [a, a = b][0];

아래 데모:

var a=1,
    b=2,
    output=document.getElementById('output');

output.innerHTML="<p>Original: "+a+", "+b+"</p>";

b = [a, a = b][0];

output.innerHTML+="<p>Swapped: "+a+", "+b+"</p>";
<div id="output"></div>

ES6(Firefox 및 Chrome은 이미 지원(할당 어레이 매칭 파괴):

let a = 5, b = 6;
[a, b] = [b, a];
console.log(`${a} ${b}`);

다음과 같이 할 수 있습니다.

var a = 1,
    b = 2,
    tmp;
tmp = a;
a = b;
b = tmp;

가독성과 유지보수의 용이성에 있어서는, 이것을 능가할 수 없습니다(적어도 JavaScript 에서는).코드를 유지하는 사람(앞으로 6개월 후까지 포함)은 정확하게 무슨 일이 일어나고 있는지 알 수 있습니다.

이들은 정수이기 때문에 세 번째 변수를 사용하지 않고 원하는 수의 교묘한 방법을1 사용하여 스왑할 수도 있습니다.예를 들어 비트 단위 xor 연산자를 사용할 수 있습니다.

let a = 1, b = 2;
a = a ^ b;
b = a ^ b;
a = a ^ b;
    
console.log('a is now:', a);
console.log('b is now:', b);

이를 XOR 스왑 알고리즘이라고 합니다.운영이론은 이 위키피디아 기사에 설명되어 있습니다.

1"유능한 프로그래머는 자신의 두개골 크기가 제한적이라는 것을 충분히 알고 있습니다. 따라서 그는 자신의 일에 겸손하게 임하고 전염병 같은 교묘한 계략을 피한다." - 에드거 W. 다이크스트라

아래 코드는 사용하지 마십시오.두 변수의 값을 스왑하는 방법은 권장되지 않습니다(단순히 임시 변수를 사용).JavaScript 트릭만 보여줍니다.

이 솔루션에서는 일시적인 변수나 어레이를 사용하지 않고 1개의 추가만 사용합니다.또, 고속입니다.실제로 여러 플랫폼에서 임시 변수보다 빠를있습니다.
모든 번호에 대해 동작하며 오버플로우가 발생하지 않으며 Infinity 및 NaN 등의 엣지 케이스를 처리합니다.

a = b + (b=a, 0)

2단계로 동작합니다.

  • (b=a, 0)놓다b의 오래된 가치로a및 산출량0
  • a = b + 0놓다a의 오래된 가치로b

ES6 이후로는 변수를 보다 우아하게 교환할 수도 있습니다.

var a = 1,
    b = 2;

[a, b] = [b, a];

console.log('a:', a, 'b:', b); // a: 2 b: 1

여기 한 가지 방법이 있습니다.a그리고.b이미 존재하며 값을 스왑해야 합니다.

var c=a, a=b, b=c;

@Kay가 언급했듯이 이 방법은 어레이 방식보다 성능이 우수합니다(거의 2배 빠릅니다).

이제 다음 작업을 수행할 수 있습니다.

let a = 5;
let b = 10;

[a, b] = [b, a]; // ES6

console.log(a, b);

임시 스왑 변수 또는 XOR을 사용할 수 있습니다.

a = a ^ b
b = a ^ b
a = a ^ b

이는 기본적인 논리 개념일 뿐이며 XOR 연산을 지원하는 모든 언어로 작동합니다.

edit: 코멘트를 참조해 주세요.이것은 반드시 정수에서만 작동한다는 것을 말하는 것을 잊었습니다.질문의 스레드에서 정수 변수를 가정했습니다.

다음과 같은 세 번째 변수를 사용합니다.

var a = 1,
    b = 2,
    c = a;

a = b; // must be first or a and b end up being both 1
b = c;

데모 - 세 번째 변수 사용


당신의 질문이 소중했기 때문에 "이 변수만, 어떤 객체도 아니다."라는 대답도 소중할 것입니다.

var a = 1, b = 2

a=a+b;
b=a-b;
a=a-b;



는 할 수 " "더 짧게는 할 수 있다"

 b=a+(a=b)-b;

데모: http://jsfiddle.net/abdennour/2jJQ2/

ES6 파괴:

: " " "[a, b] = [b, a]; // my favorite

:{a, b} = {a:b, b:a}; // not bad neither

어떻게 이런 고전적인 얼리너들을 놓칠 수가 있지?

var a = 1, b = 2
a = ({a:b, _:(b=a)}).a;

그리고.

var a = 1, b = 2
a = (_=b,b=a,_);

마지막은 글로벌 변수 '_'를 공개하지만 일반적인 자바스크립트 규약은 '돈트케어' 변수로 사용하는 것이기 때문에 중요하지 않습니다.

프로그래밍 올림피아드 같은 게 보이네요또 하나의 까다로운 솔루션:

b = (function(){ a=b; return arguments[0]; })(a);

바이올린: http://jsfiddle.net/cherniv/4q226/

단일 회선 스왑

a = a^b^(b^=(a^b));
var a = 5;
var b = 10;

b = [a, a = b][0];
//or
b = [a, a = b];
b = b[0];

//or
b = [a, b];
a = b[1];
b = b[0];


alert("a=" + a + ',' + "b=" + b);

2개 //or를 제거하거나 주석을 달아 하나의 코드 세트로 실행합니다.

http://jsfiddle.net/USdv8/57/

다음과 같이 var를 스왑할 수 있습니다.

var val1 =  117,
    val2 = 327;

val2 = val1-val2; 
console.log(val2);
val1 = val1-val2;
console.log(val1);
val2 = val1+val2;
console.log(val2);

이 방법은 실행 속도가 느리다고 들었기 때문에:

b = [a, a = b][0];

개체(또는 배열)에 변수를 저장할 계획인 경우 이 기능이 작동해야 합니다.

function swapVars(obj, var1, var2){
    let temp = obj[var1];
    obj[var1] = obj[var2];
    obj[var2] = temp;
}

사용방법:

let test = {a: 'test 1', b: 'test 2'};

console.log(test); //output: {a: 'test 1', b: 'test 2'}

swapVars(test, 'a', 'b');

console.log(test); //output: {a: 'test 2', b: 'test 1'}

IIFE를 사용하여 추가 파라미터 없이2개의 값을 교환할 수 있습니다.

var a = 5, b =8;
b = (function(a){ 
    return a 
}(a, a=b));

document.write("a: " + a+ "  b:  "+ b);

ES5까지 두 숫자를 교환하려면 온도 변수를 만든 다음 교환해야 합니다.그러나 ES6에서는 어레이 파괴 기능을 사용하여 2개의 번호를 쉽게 교환할 수 있습니다.예를 참조해 주세요.

let x,y;
[x,y]=[2,3];
console.log(x,y);      // return 2,3

[x,y]=[y,x];
console.log(x,y);      // return 3,2

JavaScript ES6 파괴에 대해 자세히 알아보기

첫 번째 방법은

var a = 5, b = 9;

a = a - b;
b = a + b;
a = b - a;

console.log(a, b);

세컨드웨이

var a = 19, b = 22;

[a, b] = [b, a];

console.log(a, b);

간단 명료한 대답

let a = 2, b = 4;
[b, a] = [a, b];

좀 더 장황한 접근법은

let a = 2, b = 4;
a = [a, b];
b = a[0];
a = a[1];

이전에도 같은 답변을 드렸지만, 여기에 그것을 설명하는 png가 있습니다.

가장 간단한 형식:

여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/16201656/how-to-swap-two-variables-in-javascript

반응형