// sliceAndSortedArr 임마는 성공적으로 복사가 된 후, 정렬이 된 것을 확인 가능하다.
console.log(originalArray);
console.log(sliceAndSortedArr);
[ 3, 1, 4, 1, 5, 9 ]
[ 1, 1, 3, 4, 5, 9 ]
솔루션2. [...arr] 스프레드 연산자를 사용하여 복사 한 후 sort를 해준다.
letspreadAndSortedArr= [...originalArray].sort();
// 콘솔 함 찍어보자
console.log(originalArray); // 원래 배열
console.log(spreadAndSortedArr); // 스프레드 연산자로 복사를 한 후 정렬한 배열
[ 3, 1, 4, 1, 5, 9 ]
[ 1, 1, 3, 4, 5, 9 ]
sort 문법의 기본 원리
arr.sort([비교함수]); 가 기본적인 모양인데 비교함수를 넣을 수 있는 자리가 옵션으로 마련이 되어있다. 비교함수 자리에 옵션이라고 비교함수를 넣지 않는다..? let arr = [2, 1, 9, 80]; 이라는 변수가 있다고 가정을 해본다.
arr.sort()를 통해서 정렬을 하면?? [1, 2, 9, 80]을 생각하겠지만 응~ 아니야~ 뜬금없이 [1, 2, 80, 9] 가 나온다.(???) sort();는 문자열로 변환을 하고 오름차순으로 유니코드의 순서대로 정렬을 하게 되는데 여기에서 비교 함수의 중요성이 보이게 된다..
* 오름차순(asc = 어센딩)으로 정렬하기 * => arr.sort((a, b) => a - b); === arr.sort(fuction(a, b) {return a - b});
* 내림차순(desc = 디센딩)으로 정렬하기 * => arr.sort((a, b) => b - a); === arr.sort(function(a, b) { return a - b});
이유는 하단을 참고합시다.
- a와 b를 뺐을 때 결과가 음수가 나오면 a와 b의 위치는 바뀌고, 양수가 나오면 변하지 않는다. * 왜 인덱스 1, 2에서 a와 b의 위치가 바뀌었는가?? : JS가 채택한 알고리즘 방식이기 때문에 만든 사람한테 따져야할 듯
* 객체로 이루어진 배열에서의 정렬 * 귀찮다. VS에 열심히 써가면서 했으니까 나중에 읽을 때도 이해되겠지 뭐...
- 비교함수 안의 obj1, obj2는 각각의 객체 1개씩을 의미한다. - return문에서 obj2.age - obj1.age 한 값을 반환한다. --> obj2, obj1의 age key에 접근해서 value(값)을 내놓으라고 협박한다.