정렬 목적으로 2 개의 문자열을 알파벳순으로 비교


105

정렬을 위해 알파벳순으로 2 개의 문자열을 비교하려고합니다. 예를 들어 if('aaaa' < 'ab'). 시도했지만 올바른 결과가 나오지 않아 올바른 구문이 아닌 것 같습니다. jquery 또는 Javascript에서 어떻게 수행합니까?



그것이 당신이하는 방법입니다. 어떤 결과를 기대하십니까? 표현식은를 'aaaa' < 'ab'반환합니다 true. <! -투표를 제거하기위한 거짓 편집->
Guffa

답변:


122

몇 가지 테스트 사례를 살펴 보겠습니다. JS 콘솔에서 다음 표현식을 실행 해보세요.

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

모두 true를 반환합니다.

JavaScript는 문자열을 문자별로 비교하고 "a"는 알파벳에서 "b"앞에 오므로보다 작습니다.

귀하의 경우에는 그렇게 작동합니다-

1 . " AAA"< " B"

처음 두 "a"문자를 비교합니다. 모두 동일하므로 다음 문자로 이동합니다.

2. 의 " 경우 → AA"< "는 B "

두 번째 문자 "a"를 "b"와 비교합니다. "a"는 "b"앞에옵니다. true를 반환합니다.


2
Č, č, Š, š, Ž, ž와 같은 특수 문자에 대한 논의는 stackoverflow.com/questions/6909126/…을
dsdsdsdsd

4
이것이 기본적으로 내장되어 있다는 것이 인상적입니다!
Slava Knyazev

11
명심해야 할 것은 대문자입니다. "a" < "b" === true "a" < "B" === false.
Ted van Riel

141

당신은 비교가 정렬 목적이라고 말합니다. 그런 다음 대신 제안합니다.

"a".localeCompare("b");

그것은 반환 -1이후 "a" < "b", 1또는 0당신이 필요 같은, 그렇지 않으면 (Array.prototype.sort)

정렬은 로케일에 따라 다릅니다. 독일어 예는, ä의 변종이다 a, 그래서 "ä".localeCompare("b", "de-DE")돌아갑니다 -1. 스웨덴어에서는 ä알파벳의 마지막 문자 중 하나이므로를 "ä".localeCompare("b", "se-SE")반환합니다 1.

에 대한 두 번째 매개 변수가 없으면 localeCompare브라우저의 로케일이 사용됩니다. 내 경험상 결코 내가 원하는 것이 아닙니다. 모든 사용자에게 고정 된 로케일을 가진 서버와 다르게 정렬되기 때문입니다.


6
+1은 경우에도 괜찮으며 ( "aa".localeCompare("ab")== "aa".localeCompare ( "Ab") 내가 생각할 수있는 모든 로케일에 대해) 괜찮으며 이전 버전의 IE에서도 작동 한다는 점을 언급 할 가치가 있습니다. 받아 들여진 대답이어야합니다!
user56reinstatemonica8

1
Peter에게는 +1; 이것은 어쨌든 Javascript 배열 정렬이 작동하는 방식과 더 호환되므로 더 유용하며 OP가 요구 한 것보다 더 많은 것 같습니다.
그랜드 클로징

나는 이것이 정답이어야한다고 생각한다. 알파벳 ( 유니 코드 아님) 문자열을 비교 하는 유일한 방법 입니다.
Limbo

이것은 영숫자 값에서도 실제로 트릭을 수행하는 것처럼 보였습니다. 감사.
Joshua Pinter

30

"x"> "X"와 같은 문자열 비교는 대소 문자를 구분한다는 것을 기억하십시오.

"aa" < "ab" //true
"aa" < "Ab" //false

.toLowerCase()대소 문자를 구분하지 않고 비교 하는 데 사용할 수 있습니다 .



3

객체 배열이 있다고 가정 해 보겠습니다.

{ name : String }

그런 다음 배열을 다음과 같이 정렬 할 수 있습니다.

array.sort(function(a, b) {
    var orderBool = a.name > b.name;
    return orderBool ? 1 : -1;
});

참고 : 대문자에주의하십시오. 목적에 따라 문자열을 소문자로 변환해야 할 수도 있습니다.


정렬에 사용되는 함수는 같으면 0을 반환합니다. 이 함수는 -1 또는 1 만 반환합니다.
Steve
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.