js에서 sort는 문자열을 정렬해주는 배열 메소드이다. 배열로 만들 수만 있다면, object에서도 유용하게 사용하는 메소드이다.
<script>
const arr = [1,3,5,10,2]
arr.sort();
console.log(arr);
</script>
결과 : [1,10,2,3,5]
왜? sort는 유니코드 순서에 따라 값을 정렬하기 때문이다. 이 순서는 우리가 아는 내림차순/오름차순이랑 다르다.
원하는 대로 오름차순 정렬하려면 파라미터를 사용해야 한다.
<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) -> 오름차순 정렬
<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순서를 바꿔주었다.
객체에서도 가장 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
// }]
이 경우에는 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