一般情况下JS的排序利用Array的sort方法:
arrayobj.sort(sortfunction)
针对一些特殊的排序要求,还可以自定义sortfunction:
如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:
负值,如果所传递的第一个参数比第二个参数小。
零,如果两个参数相等。
正值,如果第一个参数比第二个参数大。
这里提供一个按字母顺序排序的方法,由于某个字母大小写的ASCII码不同,所以不能用'<','>'比较。因此用一个Object来定义字符顺序,注意顺序完全按照自己的需求定义:
var character = {
0: -2,
1: -1,
2: 2,
3: 3,
4: 4,
5: 5,
6: 6,
7: 7,
8: 8,
9: 9,
a: 11,
A: 12,
b: 13,
B: 14,
c: 15,
C: 16,
d: 17,
D: 18,
e: 19,
E: 20,
f: 21,
F: 22,
g: 23,
G: 24,
h: 25,
H: 26,
i: 27,
I: 28,
j: 29,
J: 30,
k: 31,
K: 32,
l: 33,
L: 34,
m: 35,
M: 36,
n: 37,
N: 38,
o: 39,
O: 40,
p: 41,
P: 42,
q: 43,
Q: 44,
r: 45,
R: 46,
s: 47,
S: 48,
t: 49,
T: 50,
u: 51,
U: 52,
v: 53,
V: 54,
w: 55,
W: 56,
x: 57,
X: 58,
y: 59,
Y: 60,
z: 61,
Z: 62
};
在这个基础上,构建判断两个单词的大小的sortfunction:
function compare(str1, str2,/*Boolen, compare with chinese?*/isChinese){
console.info('compare');
str1 = dojo.trim(str1);
str2 = dojo.trim(str2);
i = 0;
var s1 = str1.charAt(i);
var s2 = str2.charAt(i++);
while (s1) {
// if(isChinese){
//
// console.info('in chinese:')
// if( s1>= 0x4E00 && s1 <= 0x9FA5){
// alert('s1 chinese!')
// //s1,s2 both chinese,compare ASCII
// if(s2 >= 0x4E00 && s2 <= 0x9FA5){
// alert('s2 chinese!')
// if(s1<s2){
// return -1;
// }else if(s1>s2){
// return 1
// }else{
// continue;
// }
// }else{
// //s2 is not chinese,s1 is bigger
// return 1;
// }
// }else if(s2 >= 0x4E00 && s2 <= 0x9FA5){
// //s2 is chinese,s1 isn't chinese, s2 is bigger
// alert('s2 chinese!')
// return -1;
// }
// //none of s1,s2 is chinese,to normal process
// }
if(!s2){
return 1;
}
//special character sort by ASCII order
if(!character[s1]){
if(!character[s2]){
if(s1<s2){
return -1;
}else if(s1>s2){
return 1;
}else{
s1 = str1.charAt(i);
s2 = str2.charAt(i++);
continue;
}
}else{
return -1;
}
}else if(!character[s2]){
return 1;
}
//alphabet and number
if (character[s1] < character[s2]) {
return -1;
}
else
if (character[s1] > character[s2]) {
return 1;
}
else {
s1 = str1.charAt(i);
s2 = str2.charAt(i++);
}
}
if(!s2){
return 0;
}
return -1;
}
当然这个方法不一定只用于Array的sort中,也可以在自定义数据结构中使用,比如linklist,double linklist..
分享到:
相关推荐
java中数组的自定义排序,种类繁多,简单实现,可自由操控。
在一次做项目的时候,项目已经做完了,过后要求排序要按照要求的方式进行排列,我试了很多方式,通过id,时间排序等都不能满足需求,我还想用存储过程的方式来也太麻烦了,过后我想了一种方式,就是自定义排序,我在...
table table自定义列排序;目前支持数值排序,文本(支持中文)排序; 示例: var option = { tableid: '#tableid', sortindex: 7, sorttype: "down", sortby: "text" }; $("#tableid").sortTable(option);
Java 类自定义排序
vue+element-ui实现穿梭框数据自定义排序 实现了穿梭框右侧数据自定义排序的功能
1 如何将数据显示到 ListView。 2 如何对 ListView 中的数据进行求和,并显示到 ListView 上。 3 如何对 ListView 进行自定义排序,并且排序后始终保存合计的行在最下方。
Excel自定义排序.rar,Excel可以根据数字顺序或字母顺序进行排序,但并不局限于使用标准的排序顺序。如果用户想用一种特殊的非字母顺序的排序方法对一系列数据进行排序,则可以使用自定义排序次序,如本例。
Flex中如何创建自定义排序DataGrid控件的例子
lucene自定义排序实现,大家有兴趣关注我的博客http://blog.csdn.net/wuyinggui10000/article/category/3173543
刚写了一个DataGridView自定义排序的方法,注意,在这个程序中,DataGridView的DataSource不是DataTable ,而是IList集合,加载到DataGridView里全是string类型,在既有文字和数字的地方要进行不同的排序,特别是...
在ASP.NET 2.0中操作数据:创建自定义排序用户界面(源码)
用vba编写宏来实现自定义序列排序,多级排序
STL对于C++编程者而言,相信都非常喜爱吧。但是其中的排序准则,你亲自试过修改吗?如何修改?请参考本文档的思路和实现过程吧。
jquery 可自定义日期排序的tablesorterjquery 可自定义日期排序的tablesorter
功能强大的javascript表格排序,可以设定排序规则,设定哪些列排序,哪些列不排序。运行速度快。两部操作就搞定,使用方便简单!解决服务器端数据库排序的压力!
易语言自定义数据类型数组排序源码,自定义数据类型数组排序,更新超级列表框,取随机品名,根据产地排序,根据类别排序,根据售价排序
在查询表时,当表的排序列并非所想要的排序方式并且不能修改表的排序数据时,这个自定义Order By来排序的SQL非常有用,只需要一句简单的查询。
自定义排序 例题: 先按照数学成绩进行倒叙排序 如果数学成绩相同 语文成绩谁高谁在前 tom 98 66 jack 55 55 bob 98 44 joe 44 99 max 60 79 peter 60 55 jerry 60 99 kay 99 99 kim 98 99 代码实现 带*****号表示...
在做交叉报表时,使用crosstab控件,可是一般都是按照id或其他描述进行排序,如果想把“合计”放最下面就遇到麻烦了。
本人在某宝花260元买的“ecshop分类页筛选属性自定义排序插件”,今日与同“ecshop商品详情页属性排序插件”一起奉上。 ECSHOP的分类列表页有一个“商品筛选”功能,可以对不同品牌不同价格不同属性的商品进行筛选...