JavaScript中的中文排序问题
以下代码已经实现了英文名字的排序,但是中文名字却不能按拼音排序,怎么解决?
HTML代码:
<html>
<head>
<title> Array Sorting Example </title>
<script language= "JavaScript " type= "text/javascript " src= "sort.js ">
</script>
</head>
<body>
<h1> Sorting String Arrays </h1>
<p>
Enter two or more name in the field below, and the sorted list of names will appear in the text area.
</p>
<form name= "theform ">
Name:
<input type= "text " name= "newname " size= "20 ">
<input type= "button " name= "addname " value= "Add " onclick= "SortNames(); ">
<br>
<h2> Sorted Names </h2>
<textarea cols = "60 " rows = "10 " name = "sorted ">
The sorted names will appear here.
</textarea>
</form>
</body>
</html>
JS代码:
var numnames = 0;
var names = new Array();
var nums = new Array();
function SortNames()
{
thename = document.theform.newname.value;
thename = thename.toUpperCase();
names[numnames] = thename;
nums[numnames] = numnames;
numnames++;
names.sort();
document.theform.sorted.value = names;
}
------解决方案-------------------- 百渡搜一下n多
JavaScript提供了一种更简便的方法用于比较两个字符串——localeCompare(),localeCompare()使用本地特定的顺序来比较两个字符串,语法如下:
string.localeCompare(target)
参数target是要与string进行比较的字符串。
如果string小于target,则localeCompare()返回小于0的数;
如果string大于target,返回大于0的数;
如果相等(或按照本地顺序的约定两者顺序相当),则返回0。
利用该方法替换上面冗长的作法后,除了代码减少了之外,运行速度也快了不少,而且还支持其它字符库的本地排序。
修改后代码如下:
该方法目前已作为ECMAScript v3标准,在支持JavaScript 1.5(Mozilla、Netscape 6+)以及JScript 5.5(IE 5.5+)的浏览器中均得到了支持。
<script type= "text/javascript ">
<!--
function startSort(){
var a=document.getElementById( 's ').value;
a=a.split( ', ')
a.sort();
document.getElementById( 'r1 ').value=a;
a.sort(function(a,b){return a.localeCompare(b)});
document.getElementById( 'r2 ').value=a;
}
//-->
</script>
<p> 包含汉字的字符串数组(用逗号 ", "隔开): <br />
<textarea id= "s " style= "width: 100%; overflow: scroll; word-wrap: normal; " rows= "10 "> 张韶涵,b土,abort,张学友,something,苹果,五月天,刘德华,香蕉,apple,范玮琪,阿桑 </textarea> </p>
<p style= "text-align: center "> <input type= "button " value= "排序测试 " onclick= "startSort() " style= "width: 300px " /> </p>
<p> 默认排序结果: <br />
<textarea id= "r1 " style= "width: 100%; overflow: scroll; word-wrap: normal; " rows= "10 "> </textarea> </p>