js array.sort()가 원본을 바꾼다

  • 가끔 원본이 바뀌어서 예상치 못한 동작을 할 때가 있다
1
2
3
4
5
6
7
8
9
10
11
12
13
// 원본인 arr 이 정렬됨
{
const arr = [1, 2, 3];
const sortedArr = arr.sort((a, b) => b - a);
console.log(arr === sortedArr); // true
}

// 원본인 arr를 살리면서 정렬된 새 배열 얻기
{
const arr = [1, 2, 3];
const sortedArr = [...arr].sort((a, b) => b - a);
console.log(arr === sortedArr); // false
}
  • [...arr] 이런 식으로 배열을 복사할 수 있다

하나 더, 배열 복사할 때 주의할 점

  • 그런데 number[] 타입이 아니라 {...}[]같은 객체 배열이라면
  • [...arr] 연산으로 새로운 배열이 만들어지기는 하지만
  • 원소 하나하나는 여전히 call by reference 이기 때문에
  • 완전한 복사본(깊은 복사)을 얻은 게 아니라는 점을 유의해야 한다

참고

Author

chinsung

Posted on

2021-07-07

Updated on

2021-07-12

Licensed under

댓글