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의 위치를 바꿔주게 되면 된다

즉 양수면은 바뀌게 되고 음수면 안바뀐다