답변:
몇 가지 테스트 사례를 살펴 보겠습니다. JS 콘솔에서 다음 표현식을 실행 해보세요.
"a" < "b"
"aa" < "ab"
"aaa" < "aab"
모두 true를 반환합니다.
JavaScript는 문자열을 문자별로 비교하고 "a"는 알파벳에서 "b"앞에 오므로보다 작습니다.
귀하의 경우에는 그렇게 작동합니다-
1 . " AAA"< " B"
처음 두 "a"문자를 비교합니다. 모두 동일하므로 다음 문자로 이동합니다.
2. 의 " 경우 → AA"< "는 B "
두 번째 문자 "a"를 "b"와 비교합니다. "a"는 "b"앞에옵니다. true를 반환합니다.
"a" < "b" === true "a" < "B" === false.
당신은 비교가 정렬 목적이라고 말합니다. 그런 다음 대신 제안합니다.
"a".localeCompare("b");
그것은 반환 -1이후 "a" < "b", 1또는 0당신이 필요 같은, 그렇지 않으면 (Array.prototype.sort)
정렬은 로케일에 따라 다릅니다. 독일어 예는, ä의 변종이다 a, 그래서 "ä".localeCompare("b", "de-DE")돌아갑니다 -1. 스웨덴어에서는 ä알파벳의 마지막 문자 중 하나이므로를 "ä".localeCompare("b", "se-SE")반환합니다 1.
에 대한 두 번째 매개 변수가 없으면 localeCompare브라우저의 로케일이 사용됩니다. 내 경험상 결코 내가 원하는 것이 아닙니다. 모든 사용자에게 고정 된 로케일을 가진 서버와 다르게 정렬되기 때문입니다.
"aa".localeCompare("ab")== "aa".localeCompare ( "Ab") 내가 생각할 수있는 모든 로케일에 대해) 괜찮으며 이전 버전의 IE에서도 작동 한다는 점을 언급 할 가치가 있습니다. 받아 들여진 대답이어야합니다!
"a".localeCompare("b")이전 정렬 -1이후 실제로 반환되어야합니다.ab