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

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



답변

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

"a" < "b"

"aa" < "ab"

"aaa" < "aab"

모두 true를 반환합니다.

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

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

1 . ” AAA”< ” B”

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

2. 의 ” 경우 → AA”< “는 B

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


답변

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

"a".localeCompare("b");

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

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

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


답변

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

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

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


답변

"a".localeCompare("b")이전 정렬 -1이후 실제로 반환되어야합니다.ab

http://www.w3schools.com/jsref/jsref_localecompare.asp


답변

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

{ name : String }

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

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

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


답변