社区
JavaScript
帖子详情
Array.sort()不能对汉字进行排序?
ptma
2003-12-08 04:49:24
如题
...全文
313
7
打赏
收藏
Array.sort()不能对汉字进行排序?
如题
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
meizz
2003-12-09
打赏
举报
回复
<script language=javascript>
function s1(a,b){return a-b}
function s2(a,b){return b-a}
var arr=[06,14,21,23,25,07,10,17,22,09,11,12,13,20,01,15,19,05,24,08,03,04,02,16,18]
alert("升序:"+arr.sort(s1))
alert("降序:"+arr.sort(s2))
</script>
ptma
2003-12-09
打赏
举报
回复
顶啊
ptma
2003-12-09
打赏
举报
回复
太多了。简单一些。
只要数组排序。
meizz
2003-12-08
打赏
举报
回复
<style>
tr {background-color: #FFFFFF; font-size: 10pt}
</style>
<table id=tab border=0 cellspacing=1 cellpadding=0 width=600 bgcolor=#D4D0C8>
<tr>
<td>序号</td>
<td>项目一</td>
<td>项目二</td>
<td>项目三</td>
<td>项目四</td>
<td>项目五</td>
</tr>
<tr>
<td>1</td>
<td>李白</td>
<td>12.34</td>
<td>Chinese</td>
<td>padding-bottom</td>
<td>TBODY</td>
</tr>
<tr>
<td>2</td>
<td>杜甫</td>
<td>2918</td>
<td>English</td>
<td>border-left-width</td>
<td>COLGROUP</td>
</tr>
<tr>
<td>3</td>
<td>白居意</td>
<td>911</td>
<td>America</td>
<td>border-bottom</td>
<td>FRAMESET</td>
</tr>
<tr>
<td>4</td>
<td>白求恩</td>
<td>149.12</td>
<td>Canada</td>
<td>text-align</td>
<td>VAR</td>
</tr>
<tr>
<td>5</td>
<td>李商隐</td>
<td>79.812</td>
<td>France</td>
<td>list-style</td>
<td>CAPTION</td>
</tr>
<tr>
<td>6</td>
<td>杜牧</td>
<td>416.03</td>
<td>Russia</td>
<td>margin</td>
<td>SUB</td>
</tr>
</table>
<table id=tab2 border=0 cellspacing=1 cellpadding=0 width=600 bgcolor=#D4D0C8>
<tr style="background-color: menu">
<td>序号</td>
<td>项目一</td>
<td>项目二</td>
<td>项目三</td>
<td>项目四</td>
<td>项目五</td>
</tr>
<tr>
<td>1</td>
<td>李白</td>
<td>12.34</td>
<td>Chinese</td>
<td>padding-bottom</td>
<td>TBODY</td>
</tr>
<tr>
<td>2</td>
<td>杜甫</td>
<td>2918</td>
<td>English</td>
<td>border-left-width</td>
<td>COLGROUP</td>
</tr>
<tr>
<td>3</td>
<td>白居意</td>
<td>911</td>
<td>America</td>
<td>border-bottom</td>
<td>FRAMESET</td>
</tr>
<tr>
<td>4</td>
<td>白求恩</td>
<td>149.12</td>
<td>Canada</td>
<td>text-align</td>
<td>VAR</td>
</tr>
<tr>
<td>5</td>
<td>李商隐</td>
<td>79.812</td>
<td>France</td>
<td>list-style</td>
<td>CAPTION</td>
</tr>
<tr>
<td>6</td>
<td>杜牧</td>
<td>416.03</td>
<td>Russia</td>
<td>margin</td>
<td>SUB</td>
</tr>
</table>
<SCRIPT LANGUAGE="JavaScript"><!--
var sortTable = null; //表格排序的构造对象
function meizzSortTable()
{
this.IE = (window.navigator.appName=="Microsoft Internet Explorer");
this.tables = new Array(); //所有要被排序的 Table
this.items = new Array(); //当前排序的那列的内容
this.heads = new Array();
this.numeric= false; //指排序的内容是否为数字
this.chinese= false; //排序内容存在中文字符
this.index = null; //当前正在排序的那个 Table 在表数组里的序号
this.sortWay= true; //为 false 时这倒排序
this.flagId = "sortFlagButtonId";
this.add = function(e)
{
if (!(e && e.tagName=="TABLE")){
alert("对不起!你传入的对象不是 TABLE ,不能进行排序操作"); return false;}
e.rows[0].className = "sortTableHead";
var len = e.rows[0].cells.length;
e.rows[0].className = "TableSort";
var m = this.tables.length;
for (var i=0; i<len; i++)
{
e.rows[0].cells[i].style.cssText = "border: 1px outset #D4D0C8; cursor: default";
if(e.rows[0].cells[i].innerText.trim() != "")
e.rows[0].cells[i].onclick = function(){sortTable.sortItemClick(this, m);}
}
this.tables[m] = e;
this.heads[m] = null;
}
this.sortItemClick = function(e, m)
{
var td = searchObjByTagName(e, "TD");
var tab= this.tables[m];
this.sortWay = (this.heads[m] == td) ? !this.sortWay : true;
this.heads[m] = td;
var n = td.cellIndex;
this.items.length = 0;
this.numeric = true;
this.chinese = false;
for (var i=1; i<tab.rows.length; i++)
{
var txt = tab.rows[i].cells[n].innerText.trim();
if ( this.numeric && isNaN(txt)) {this.numeric = false;}
if (!this.chinese && /[^\x00-\xff]+/.test(txt)) this.chinese = true;
this.items[this.items.length] = txt +"_"+ i;
}
this.sortFlag(this.sortWay, m);
if (sortTable.chinese && !sortTable.IE)
{
alert("对不起,对表格的排序功能只适用于IE浏览器!");
return false;
}
this.items = (this.sortWay) ? this.items.sort(this.condition) : this.items.sort(this.condition).reverse();
this.moveCell(tab, this.items);
}
this.sortFlag = function(B, m)
{
var str = "<input type=button id='"+ this.flagId +""+ m +"' align='absmiddle' "+
" value='"+ (B?"▲":"▼") +"' title='"+ (B?"正":"倒") +"排序' disabled "+
" style='font-size: 9pt; border:0; height: 12; background-color: transparent'>";
var e = getObjectById(this.flagId +""+ m); if(e) e.removeNode(true);
this.heads[m].insertAdjacentHTML("beforeEnd", str);
}
this.asc = function(str)
{
try{ execScript("strAsc = ASC('"+ str +"')", "vbscript");}
catch(e){window.status = "对不起!你的浏览器版本太低!不能支持排序!"; return false;}
if(strAsc < 0) strAsc += 65535; return strAsc;
}
this.condition = function(str1, str2)
{
var s1 = str1.substring(0, str1.lastIndexOf("_"));
var s2 = str2.substring(0, str2.lastIndexOf("_"));
if (sortTable.numeric) return(s1 - s2);
else
{
var length = (s1.length > s2.length) ? s1.length : s2.length;
for(var i=0; i<length; i++)
{
if(i==s1.length || i==s2.length) break;
var n1 = (sortTable.chinese) ? sortTable.asc(s1.charAt(i)) : s1.charCodeAt(i);
var n2 = (sortTable.chinese) ? sortTable.asc(s2.charAt(i)) : s2.charCodeAt(i);
if(n1 != n2) return n1-n2;
}
return(s1.length - s2.length);
}
}
this.moveCell = function(table, array)
{
var len = array.length, b = new Array();
for(var i=0; i<array.length; i++) b[i] = parseFloat(array[i].match(/\d+$/));
for(var i=1; i<len; i++)
{
if(b[i-1] != i)
{
table.moveRow(b[i-1], i);
for(var j=0; j<len; j++)
{
if(b[j]>=i && b[j]<b[i-1])
b[j]++;
}
b[i-1] = i;
}
}
}
} sortTable = new meizzSortTable();
function attachScripting()
{
sortTable.add(document.all.tab);
sortTable.add(document.all.tab2);
}
window.attachEvent("onload", attachScripting);
function getObjectById(id)
{
if (arguments.length == 0) return null;
/*@cc_on @*/ /*@if (@_jscript_version>=3) return document.all(id); @end @*/
if(window.navigator.appName=="Netscape" && parseInt(window.navigator.appVersion)>5)
return document.getElementById(id);
try {return document.getElementById(id);} catch(e){ return eval(id);}
}
String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g,"");}
function searchObjByTagName(obj, tag)
{
while(obj!=null && typeof(obj.tagName) != "undefind")
{
if(obj.tagName == tag.toUpperCase()) return(obj);
obj = obj.parentElement;
}
return null;
}
//--></SCRIPT>
ptma
2003-12-08
打赏
举报
回复
麻烦具体些
给个例子
meizz
2003-12-08
打赏
举报
回复
默认方式排序的话, 是按 Unicode 的方式排序的, 在字母与数字来说排序是正确, 但是若是汉字的话, Unicode 与汉字拼音的顺序是不一样的, 所以排出来的序也是不对的, 解决的方法是碰到汉字时把 Unicode 转成 ASCII 码来做, 比如在JS里调用VBS里的 ASC() 函数等
springtime
2003-12-08
打赏
举报
回复
我的印象当中好象是可以的
不过他的排序规则不是按照汉字的习惯顺序排
JS实现中文
汉字
按拼音排序的方法
本文实例讲述了JS实现中文
汉字
按拼音排序的方法。分享给大家供大家参考,具体如下: 代码1,拼音排序: var
array
= ['武汉', '北京', '上海', '天津']; var result
Array
=
array
.
sort
( function compareFunction(param1, param2) { return param1.localeCompare(param2,"zh"); } ); console.log(result
Array
); 火狐浏览器 result
Array
结果为: [ '北京' , '上海' , '天津' ,'武汉' ] ; 代码2,
PHP中使用a
sort
进行中文排序失效的问题处理
PHP中有非常方便的对数组进行重新排序的方法——a
sort
,关于a
sort
的使用方法可以看 这里 。但是a
sort
对含有中文key的数组
进行排序
时,有时候并不是按照字母顺序。这主要是编码问题,如果编码为UTF-8,则不会按照字母顺序来排,解决方法是先转换成GBK编码,排序完再转回UTF-8. 示例:有一个数组$pass,结构类似为
Array
( [0] => stdClass Object ( [username] => 张三 [password] => DQ9uqQW2+UudOsZpQMnyvGG9L+RHZB6LRzBVDvAEL9uOBNf2zTWUnykhZFj
JS数组对象
Array
详解大全(含课件和源代码)
讲解javascript中重点的数组对象
Array
的使用大全。包含属性:constructor、length(数组长度)、prototype包含方法:concat、copyWithin、entries、every、fill、filter、find、findIndex等
JS中使用
sort
结合localeCompare实现中文排序实例
说到表格排序,首先要说的就一定是数组的排序,因为数组排序是表格排序的基础。 JavaScript为数组提供了
sort
()方法用于表格排序,默认情况下该方法会使
Array
中的数组按照ASCII码的顺序进行排列,JavaScript还为数组提供了数组倒序的方法reverse()。 看一下示例: 代码如下: function
sort
Array
(){ var
array
Test = [“z”,5,2,”a”,32,3];
array
Test.
sort
(); alert(
array
Test.toString());
PHP与MYSQL中UTF8编码的中文排序实例
本文实例讲述了PHP与MYSQL中UTF8编码的中文排序方法,分享给大家供大家参考。具体实现方法如下: 一般来说,中文共有三种排序方式: 1.根据拼音排序; 2.根据笔画排序; 3.根据偏旁排序。 系统的默认排序方式为拼音排序了,这个也是我们常用的,下面介绍的就是按拼音排序了 1. 需要在php数组中用中文排序,但是一般使用utf8格式的文件,直接用a
sort
排序不行。用gbk和gb2312可以。这跟几种格式的编码有关系。gbk和gb2312本身的编码就是用拼音排序的。 复制代码 代码如下:function utf8_
array
_a
sort
(&$
array
) { if(!isset($arra
JavaScript
87,922
社区成员
224,618
社区内容
发帖
与我相关
我的任务
JavaScript
Web 开发 JavaScript
复制链接
扫一扫
分享
社区描述
Web 开发 JavaScript
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章