_.sortBy = function (arr, transform, order) { // transform : 이해하기 편하게 바꾸는 함수 [123.3 , 612.3, 82.11 ] <- 이럴경우 반올림,반내림 해서 표준편차를 줄여 이해하기 편하게 바꾸는 함수 order = order || 1; //order의 값을 넣었으면 order에 넣은값을쓰고 아니면 1을 쓴다 transform = transform || _.identity; //값을 보기편하게 바꿀거면 transform쓰고 함수가 없으면 값 고대로 쓴다 -> identity part1에서 인자값 그대로 리턴하는 함수 const arrCloned = _.slice(arr); // 참조타입이라 transform 함수로 인해 원본배열에 영향이 있어 slice로 복사 return arrCloned.sort(function (a, b) { // 복사한배열로 .sort 메소드 적용 -> transform 함수로 변환후 비교 if (transform(a) < transform(b)) {//compareFunction(a,b)이 0보다 작으면 a가 먼저 -> 오름차순 , a의 인덱스가 낮아야 먼저옴 return -1 * order; // 만약 a보다 b가 더 크면 a가 먼저와야되니깐 -> 0보다 작아야되니깐 -> -1을 곱함 } //0보다 작을경우 (a)가 먼저 , 0이면 (a,b)말고 다른요소 비교 , 0보다 큰 경우 (b)가먼저 // 세 번째 인자인 order는 정렬의 방향을 나타냅니다. 생략되거나 1을 입력받은 경우 오름차순, -1을 입력받은 경우 내림차순으로 정렬합니다. return order; //27 24 26 }); };
처음에 sort메소드 조차 이해하기 어려워
손도 못댔는데 천천히 읽어보면그렇게 헷갈린거지 어렵진 않았던 문제였다
sortBy 랑 sort랑 별개, 반대 라고 생각하면 이해하기쉬웠다
sort는 사전식비교
예: [3, 1000 , 200 ] 을 오름차순으로 정렬할경우
[1000 < 200 < 3 ] 으로 된다