JavaScript/기초
JAVASCRIPT 객체 정렬하기(sort) script에서의 비교 정의
svdjcuwg4638
2023. 5. 10. 14:13
비교 정의
script에서의 비교 연산자는 java와는 다른점이 많다
script에서는 자료형이 명확하지 않기도하고 빈문자열이면 0과 같은 취급을 받는다
예시코드로 말하자면 이러하다
// 1) 타입이 다르지만 비교가 가능하다
const s1 = ''
const s2 = 0
const s3 = []
const s4 = '0'
console.log(s1 == s2) // 빈 문자열과 0은 같다
console.log(s2 == s3) // 0과 빈 배열은 같다
console.log(s1 == s3) // 빈 문자열과 빈 배열은 같다
console.log('======')
console.log(s2 == s3) // 0과 빈 배열은 같다
console.log(s2 == s4) // 0과 '0'은 같다
console.log(s3 == s4) // 빈 배열과 '0'은 같다 (false)
// javascript의 비교 연산자는 ==, === 로 구분된다
// == (!=) : 타입에 상관없이 값을 비교한다
// === (!==) : 타입과 값을 같이 비교한다
// 2) 문자열도 연산자로 일치여부를 비교한다
const s5 = 'Hello'
const s6 = prompt('Hello 라고 입력하세요')
console.log(s5 === s6)
// 3) 문자열도 크기비교(크다, 작다)가 가능하다
const s7 = 'World'
console.log(s5 > s7)
console.log(s5 < s7)
일반 스트링 정렬
const arr = ['apple', 'melon', 'kiwi', 'banana']
arr.sort()
console.log(arr)
//출력결과
// 0 : "apple"
// 1 : "banana"
// 2 : "kiwi"
// 3 : "melon"
위 와같이 단순한 배열은 sort로 간편하게 정렬이 되는 반면에 객체는 다르다
왜냐하면 객체에는 하나의 값만 담긴게 아니라 한객채에는 여러개의 값이 있기때문에 무엇을 기준으로
정렬을 할지 명시해줘야 한다.
객채 정렬(오름차순)
const arr2 = [
{name: '이지은', age: 31},
{name: '홍진호', age: 42},
{name: '코난', age: 10},
{name: '나단비', age: 5},
]
// 문자열에 산술연산 - 는 작동하지 않지만
// 문자열 크기 비교 연산이 가능하기 때문에
// 크기비교 + 삼항 연산을 활용하여 문자열 기반 정렬이 가능하다
arr2.sort((a, b) => {
return a.name > b.name ? 1 : -1
// 앞이 더 크면 1을반환하여 자를 바꾸게 된다
})
console.log(arr2)
arr2.sort((a, b) => a.age - b.age)
// 앞의 숫자가 크게되면 양수가 입력되어 자리가 바뀌게 된다
console.log(arr2)
반대로 내림차순(desc)를 하고싶다면 스트링비교는 a.name < b.name 숫자비교는 a.age와 b.age의 위치를 바꿔주게 되면 된다
즉 양수면은 바뀌게 되고 음수면 안바뀐다