일반적인 상황에서는 모든 사람이 다음 방법을 사용하여 한자 병음을 정렬합니다.
var list = [ 'Wang', 'Zhang', 'Li']
list.sort(function (a, b) {
return a.localeCompare(b) ;
} );
localeCompare(): 로케일별 순서로 두 문자열을 비교합니다.
로케일비교를 통한 병음 정렬의 신뢰성은 다음과 같습니다.
1. 중국 운영체제에 크게 의존합니다.
2. 브라우저 커널에 크게 의존합니다.
즉, 방문자가 중국어가 아닌 시스템이나 IE가 아닌 브라우저(예: Chrome)에서는 우리가 예상한 병음 정렬 결과를 볼 수 없을 가능성이 높습니다.
---------------------------------- --- ---------------------
이 문제에 대한 해결책을 소개하겠습니다.
이 방법은 유니코드 문자 집합, 즉 CJK( 중국어 일본어 한국어) 한자.
var CompareStrings = {
db: '吖A 아, 오, 오, 오... 袰訨鐢骪鏏霻鶑', // 수만자는 생략
getOrderedUnicode: function (char) {
var originalUnicode = char.charCodeAt ();
if (originalUnicode >= 0x4E00 && originalUnicode <= 0x9FA5) {
var index = this.db.indexOf(char)
if (index > -1) {
return index 0x4E00;
}
}
originalUnicode 반환
},
비교: function (a, b) {
if (a == b) { return 0;
}
// 특정 필요에 따라 다시 작성할 수 있습니다. 현재 작성 방법은 끝에 빈 문자열을 넣는 것입니다. if (a.length == 0) { return 1 }
if; (b.length == 0) { return -1; }
var count = a.length > b.length ? b.length : a.length; count; i ) {
var au = this.getOrderedUnicode(a[i])
var bu = this.getOrderedUnicode(b[i])
if (au > bu) {
1을 반환; } else if (au < bu) {
return -1;
}
}
return a.length >
}
}
// 시스템의 기본 localeCompare 다시 작성
String.prototype.localeCompare = function (param) {
return CompareStrings.compare(this.toString(), param); 🎜>}
다음 링크를 통해 전체 코드를 다운로드할 수 있습니다. http://xiazai.jb51.net/201211/yuanma/js_pinyin_jb51.rar
구현 원칙에 대한 간략한 소개:
1. 병음 글꼴 라이브러리(db)로 정렬된 순서 가져오기: 목표를 달성하는 방법은 여러 가지가 있습니다. 먼저 JavaScript C#을 사용하여 한자를 모두 나열한 다음 제출했습니다. 정렬을 위해 C# 배경으로 가져온 다음 프런트 데스크로 출력합니다. 이것은 단지 준비 작업일 뿐입니다. 하, 원하는 것은 무엇이든 할 수 있습니다.
2. 두 문자 중 더 큰 문자 확인(getOrderedUnicode): 정렬 시 한자뿐만 아니라 한자 이외의 문자도 처리해야 하므로 여기서는 비교기가 모든 문자를 인식할 수 있어야 합니다. 문자 판단 한자인지 여부는 다르게 처리됩니다. 한자이면 정렬된 글꼴 라이브러리에서 색인 값을 검색하고, 얻은 색인 값과 유니코드 문자의 첫 번째 한자의 위치를 더합니다. 세트는 "보정" 뒤에 있습니다. 유니코드 문자 세트의 인덱스 값입니다. 중국어 문자가 아닌 경우 유니코드 문자 세트의 인덱스 값을 반환합니다.
3. 두 문자열 비교(비교): a가 b보다 큰 경우 두 문자열의 각 문자를 하나씩 비교합니다(유효 범위, 즉 짧은 문자열의 길이 내에서 비교). 이면 1을 반환하고, 그렇지 않으면 -1을 반환합니다.
4. 유효한 범위 내에서 비교하여 승자가 결정되지 않은 경우, 어느 쪽이 더 긴지에 따라 결정됩니다. 예를 들어 a='123', b='1234'이면 더 긴 b가 됩니다. 나중에 순위를 매겼습니다.
녹색채널 : 좋은 글이 마음에 드셨다면 팔로우, 이 글 북마크 후 연락주세요.