[TIL] 구조분해 할당

hanbyul.choi·2023년 5월 26일
0

[TIL]

목록 보기
11/39
post-thumbnail

문제

문자열 my_string과 정수 num1, num2가 매개변수로 주어질 때, my_string에서 인덱스 num1과 인덱스 num2에 해당하는 문자를 바꾼 문자열을 return 하도록 solution 함수를 완성해보세요.

내 코드

function solution(my_string, num1, num2) {
   var answer = my_string.split("");
   let temp ;
      for(let i = 0; i < answer.length; i++){
          if(i === num1){
              temp = answer[i];
              answer[i] = answer[num2]
          }else if(i === num2){
              answer[i] = temp
          }              
      }
    return answer.join("");
}

간단하게 조건문과 temp 변수를 만들어서 문제를 풀었다.

그러나 작성중 num1의 값이 num2보다 크면 제대로 동작하지 않을 것을 예상했다.
그래서 반대상황에 조건물을 만들까 고민했지만 너무 돌아가는 느낌이였다.

일단 답안이 통과되어서 다른사람의 코드를 보기로 했다.

다른 코드 예시

function solution(my_string, num1, num2) {
    my_string = my_string.split('');
    [my_string[num1], my_string[num2]] = [my_string[num2], my_string[num1]];
    return my_string.join('');
}

와우...

내가 문제를 처음 볼 때는 splice를 사용하면 되겠지 라고 생각했다.
그 이후 문자열 내부를 교환하는 과정에서 데이터 손실이 생길 것이라 생각하고 결국 반복문으로 조건을 만들어 temp변수를 활용했다.

그러나 구조분해 할당으로 한번에 데이터를 집어넣으면 손실이 생기지 않은 것 같다.

"구조 분해 할당 구문은 배열이나 객체의 속성을 해체하여 그 값을 개별 변수에 담을 수 있게 하는 JavaScript 표현식입니다."

var foo = ["one", "two", "three"];

var [red, yellow, green] = foo;
console.log(red); // "one"
console.log(yellow); // "two"
console.log(green); // "three"

이런식으로도 배열의 구조분해 할당을 사용할 수 있다.

MDN문서에
"변수 값 교환하기
하나의 구조 분해 표현식만으로 두 변수의 값을 교환할 수 있습니다."
라고 잘 나와있다.. ^^;

var a = 1;
var b = 3;

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

구조분해 할당 문서 : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

생각보다 편리한 기능이 많아 MDN문서를 정독할 필요가 있음을 느꼈다..
오늘부터 최소 하나씩이라도 기능에 대한 문서를 읽어야겠다.

0개의 댓글