const nums = [1, 10, 20, 2, 3, 5, 70, 9];
nums.sort((a, b) => {
//내림차순
//return b-a
//오름차순
return a-b
});
console.log(nums);
Sort함수는 거두절미하고 쉽게만 말하면 파라미터 (next, prev) 이렇게 next,prev 요소를 활용해서 return값이 양수이면 그대로 두고, 음수이면 요소 위치를 바꾼다.
그래서 return 값을 양수이면 위치이동이 없으므로(정렬 된거라고 볼수 있으니) return 값을 양수로 만들려고 노력한다 라고 생각하면 정렬 코드를 쉽게 이해할 수 있다
즉 파라미터 (next, prev)를 앞으로 편의상 위 코드처럼(a, b)로 말하겠다.
내림차순은 배열중 prev요소가 항상 next요소보다 커야 한다. 즉 arr[0]>=arr[1]>=arr[2]... 이게 내림차순. 따라서 prev-next
는 항상 양수
즉, b-a는 항상 양수다. 3-2는 양수고, 2-1도 양수다. 그래서 return에 양수가 되도록 b-a (= prev-next) 을 적어주면 숫자 배열에선 내림차순 정렬이 적용된다
위에 말한 것처럼 오름차순 정렬을 상상하면 [1,2,3] 형태다.
이 형태에서 항상 양수가 되려면 next-prev 식이면 항상 양수 결과일 것이다. (숫자가 점점 커지는게 오름차순이니 당연히 next - prev는 양수가 되지!) 즉 a, b로 치환하면 return a - b
는 숫자 오름차순 정렬이 된다.
가장 헷갈리는게 a는 next 요소고 b는 prev 요소다. 자꾸 a가 prev 일것 같은 착각이 드는데 그게 가장 헷갈리는 부분 ;;
연예인 객체 배열에서 객체 네임 순으로 오름,내림차순 정렬을 해보자
연예인 키, 나이는 정확하지 않다..! 어쨋든 요것도 위와 같이 오름/내림 차순일때 상상해서 파라미터 a와 b의 연산이 1이 되는 식을 return 해주면 된다.
a-b(next - prev) 는 양수 여야 한다
그래서 조건식을 a.name > b.name ? 1 : -1 이고
b-a(prev - next) 는 양수여야 한다
그래서 조건식을 b.name > a.name ? 1 : -1 로 두면 된다.
다음번에 sort 볼땐 안헷갈렸으면 한다. sort랑 친해지고 싶다