一般情况下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..
分享到:
相关推荐
自定义排序方法是 Excel 中的一种强大功能,它允许用户按照自定义顺序对数据进行排序。下面是实现自定义排序的步骤: 1. 选中工作表,依次单击“排序和筛选”—“自定义排序”。 2. 在弹出的“排序”窗口中,首先...
Java 提供了多种排序算法和方法,但是当我们需要对自定义的对象进行排序时,Java 的默认排序方法无法满足我们的需求。这时,我们需要通过实现 Comparable 接口来实现自定义排序。 Comparable 接口 Comparable 接口...
java中数组的自定义排序,种类繁多,简单实现,可自由操控。
在一次做项目的时候,项目已经做完了,过后要求排序要按照要求的方式进行排列,我试了很多方式,通过id,时间排序等都不能满足需求,我还想用存储过程的方式来也太麻烦了,过后我想了一种方式,就是自定义排序,我在...
为了解决这一问题,可以通过以下两种方法来实现交叉报表中的自定义排序: 1. **通过SQL查询定制排序**:这种方法的核心思想是在SQL查询阶段就对数据进行预处理,从而实现自定义排序。 2. **利用iReport中的Crosstab...
table table自定义列排序;目前支持数值排序,文本(支持中文)排序; 示例: var option = { tableid: '#tableid', sortindex: 7, sorttype: "down", sortby: "text" }; $("#tableid").sortTable(option);
因此,了解如何在 Lucene 中实现自定义排序是非常关键的。在这个话题中,我们将深入探讨如何根据特定的业务需求对搜索结果进行定制排序。 首先,我们要明白 Lucene 默认的排序机制。默认情况下,Lucene 搜索结果是...
这可以通过调用数据提供者的`sort`属性的`add()`方法来实现,传入我们的自定义排序实例: ```as var dataProvider:ArrayCollection = new ArrayCollection(); // 填充数据... var customSort:CustomSort = new ...
本文主要探讨了如何在*** 2.0中使用GridView控件创建一个能够自定义排序的用户界面,并着重讲解如何在相同类别的数据前添加分界行来提升用户体验。 首先,要创建一个能够排序的GridView,需要设置GridView控件的...
这个功能强大的JavaScript库,被称为"sorttable",能够帮助开发者轻松实现表格数据的排序,同时提供了自定义排序规则的能力,大大增强了用户体验。 首先,我们要理解sorttable的核心概念。在JavaScript中,排序通常...
在本文中,我们将深入探讨如何使用Vue.js框架与Element-UI库来实现穿梭框(Transfer)数据的自定义排序功能。Element-UI是基于Vue.js的一套丰富的UI组件库,其中包括了穿梭框组件,它常用于在两个列表之间进行数据的...
VBA(Visual Basic for Applications)是Excel内置的一种编程语言,通过编写VBA宏,我们可以实现更复杂的自定义排序,包括多级排序。下面将详细讲解如何使用VBA实现自定义序列排序。 首先,理解VBA的基本结构至关...
今天,我们将讨论STL自定义排序准则的实现方法。 首先,我们来看一下STL中的排序准则。STL中有多种容器,例如vector、list、set、map等,每种容器都有其自己的排序准则。例如,vector的排序准则是按照元素的自然...
通过上述案例的分析,我们可以看到使用SQL实现自定义排序是一种非常实用且灵活的方法。它不仅能够解决无法直接修改表结构的问题,还能够适应各种复杂的业务需求。掌握这一技巧对于提高SQL查询的能力以及更好地服务于...
1 如何将数据显示到 ListView。 2 如何对 ListView 中的数据进行求和,并显示到 ListView 上。 3 如何对 ListView 进行自定义排序,并且排序后始终保存合计的行在最下方。
JavaScript为数组提供了内置的sort()方法,但有时候为了满足特定的需求,我们需要自定义排序方法。本文将详细介绍JavaScript中自定义数组排序方法的原理与实现技巧。 首先,我们需要知道JavaScript中数组sort()方法...
Excel自定义排序.rar,Excel可以根据数字顺序或字母顺序进行排序,但并不局限于使用标准的排序顺序。如果用户想用一种特殊的非字母顺序的排序方法对一系列数据进行排序,则可以使用自定义排序次序,如本例。
这篇博客将深入探讨如何在STL中自定义排序规则,以满足特定的排序需求。 首先,`std::sort`函数的原型为: ```cpp template , class Compare> void sort(RandomAccessIterator first, RandomAccessIterator last, ...
本文将详细探讨在 MapReduce2 中如何实现自定义排序和分组,以满足特定的数据处理需求。 首先,了解 MapReduce 的工作流程是必要的。Map 阶段将输入数据分割成多个块,并在各个节点上并行处理。Reduce 阶段则负责...
可以将这个函数传递给layui的排序方法,使它在进行排序时调用我们的自定义逻辑: ```javascript layui.table.init('example', { sort: function(type, elem) { var field = $(elem).attr('data-field'); var ...