js-sort(배열/객체 순서대로 정렬하기)/객체 최댓값 구하기

hyerin·2023년 3월 4일
1

js에서 sort는 문자열을 정렬해주는 배열 메소드이다. 배열로 만들 수만 있다면, object에서도 유용하게 사용하는 메소드이다.

<script>
const arr = [1,3,5,10,2]
arr.sort();
console.log(arr);
</script>

결과 : [1,10,2,3,5]

왜? sort는 유니코드 순서에 따라 값을 정렬하기 때문이다. 이 순서는 우리가 아는 내림차순/오름차순이랑 다르다.
원하는 대로 오름차순 정렬하려면 파라미터를 사용해야 한다.

1. 오름차순 정렬

<script>
const arr1 = [1,3,5,10,2]
arr1.sort(function(a,b){
  return a - b;
});
console.log(arr1);
</script>

결과 : [1,2,3,5,10]
배열의 요소를 2개씩 빼서 비교(a-b) -> 오름차순 정렬

2. 내림차순 정렬

<script>
const arr2 = [1,3,5,10,2];
arr2.sort(function(a,b){
  return b - a;
});
console.log(arr2);
</script>

결과 : [10,5,3,2,1]
b,a순서를 바꿔주었다.

객체에서 최댓값 key 구하기

객체에서도 가장 value가 큰 key값을 찾으려면 sort를 써야 한다.중요한 것은 sort는 배열 메소드이기 때문에 처음부터 객체를 배열에 넣는 것이 중요하다
가장 쉬운 방법은 스프레드 문법(...)을 쓰는 것이다.

let arr = [...obj]

물건을 가격이 높은 순대로 정렬하는 문제

이같이 이미 객체가 배열안에 담겨 있는 경우엔 바로 sort를 쓰면 된다.

let items = [
  {name : "pen", price : 1000},
    {name : "bag", price : 20000},
  {name : "mouse", price : 5000},
    {name : "note", price : 2000},
  {name : "earphones", price : 10000},
]

let sortedItemsByPrice = items.sort((a,b)=>
       b.price - a.price);
console.log(sortedItemsByPrice);

//다음과 같이 가격이 큰 순서대로 정렬된다.

// //[// [object Object] 
// {
//   "name": "bag",
//   "price": 20000
// },// [object Object] 
// {
//   "name": "earphones",
//   "price": 10000
// },// [object Object] 
// {
//   "name": "mouse",
//   "price": 5000
// },// [object Object] 
// {
//   "name": "note",
//   "price": 2000
// },// [object Object] 
// {
//   "name": "pen",
//   "price": 1000
// }]

score에서 가장 점수가 높은 두 과목을 구하는 문제

이 경우에는 key값을 구하는 것이다.
Object.keys(obj이름)으로 키값을 배열 형태로 정리해준다. 그다음 배열로 정리된 key들을 sort를 이용해 '값(value)'가 큰 순서대로 정렬한다!

const score = {
  국어 : 80,
  수학 : 94,
  영어 : 80,
  과학 : 90,
  사회 : 75,
}
const keysArr = Object.keys(score);
//Object.keys는 객체의 키 값을 배열 형태로 반환한다.
//["국어","수학","영어","과학","사회"]

//이 배열을 값이 큰 순서대로 정렬한다.
const sortedArr = keysArr.sort((a,b)=> score[b]-score[a]);
//가장 점수가 큰 두 과목을 구한다.
const twoSubjects = sortedArr.slice(0,2);
console.log(twoSubjects);
//["수학","과학"]

심화. 문제 응용 - 화살표 함수

문제 : 삼각형의 완성조건

삼각형 세개의 변길이가 sides라는 배열로 주어졌을 때
삼각형이 되면1, 되지 않으면 2 반환.
(가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.)

function solution(sides) {
    sides = sides.sort((a,b) => a-b)
    return sides[0]+sides[1] > sides[2] ? 1 : 2;
}

참고 사이트 : https://hianna.tistory.com/409

profile
글쓰기의 시작은 나를 위해, 끝은 읽는 당신을 위해

0개의 댓글