LHJ

I'm a FE developer.

13-9. Array 오브젝트(ES3 기준) / sort(분류), sort()와 Unicode

02 Dec 2020 » js_beginner

13-9. Array 오브젝트(ES3 기준) / sort(분류), sort()와 Unicode

sort()

구분데이터(값)
data대상
파라미터함수opt
반환sort 결과

  • 엘리먼트 값을 승순으로 정렬
  • 정렬 기준은 엘리먼트 값의 Unicode

    • 코드 포인트가 작으면 앞에 오고 크면 뒤에 옵니다.

        var value = [4, 2, 3, 1];
        console.log(value.sort()); // [1, 2, 3, 4]
      

      승순이란 작은 값이 앞에오고 큰 값이 뒤에오는 형태입니다.
      가나다 순이라고도 합니다.

        var value = ["A1", "A01", "B2", "B02"];
        console.log(value.sort()); // ["A01", "A1", "B02", "B2"]
      
      1. 왼쪽에서 오른쪽으로 문자 하나씩 비교하여 정렬
      2. A01과 A1에서 A가 같으므로 다음 문자 비교
      3. 0과 1을 비교하게되며 0이 1보다 코드 포인트가 앞에있으므로 앞에 정렬

      비교가 완료되면 다음 문자는 비교하지 않습니다.
      B2 / B02
      B / B 끼리 비교 - 같음
      2 / 0 끼리 비교 / 0이 더 작음 -끝-
      B02의 2는 비교하지 않습니다.


  • 주의 : sort 대상 배열도 정렬됨
    원본훼손

      var value = [4, 2, 3, 1];
      console.log(value.sort()); // [1, 2, 3, 4]
      console.log(value); // [1, 2, 3, 4]
    

    sort 대상 배열이 훼손되면 안될 경우엔 사전에 복사를 합니다.


  • 값이 undefined이면 끝으로 이동

      var value = [, , 1, 2];
      console.log(value.sort()); // [1, 2, undefined, undefined]
    

    undefined가 1, 2보다 크다는 것이 아닙니다.
    단지 undefined이니깐 뒤에 정렬하는 것입니다.


sort()와 Unicode

  • 숫자에 해당하는 Unicode의 code point로 정렬

      var value = [101, 26, 7, 1234];
      console.log(value.sort()); // [101, 1234, 7, 26]
    
    1. 사람이 생각하는 일반적인 정렬은 [7, 26, 101, 1234]입니다.
    2. 위의 결과처럼 정렬된 것은 코드 포인트로 비교하여 sort하기 때문입니다.

    3. 101과 26에서 1이 2보다 작으므로 101이 26보다 작은 것으로 정렬됩니다.
    4. 또한 101과 7에서 1이 7보다 작으므로 101이 7보다 작은 것으로 정렬됩니다.

    5. 이를 해결하려면 sort()의 파라미터에 함수를 작성하고 함수에서 정렬해야 합니다.
    6. 다음 절에서 알고리즘을 다룹니다.