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

리안·2023년 3월 4일
0

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개의 댓글