如何写JS数组sort的比较函数
发布网友
发布时间:2022-04-07 06:27
我来回答
共1个回答
热心网友
时间:2022-04-07 07:56
譬如:
var
a=[1,5,3,7];
a.sort(function(a,
b)
{
return
b-a});//从大到小排列
那如果复杂点的顺序应该如何写这个比较函数呢。
对于比较函数function
f(a,b){...}
,若返回正数,则说明a和b需要交换,否则不交换。所以我们可以通通根据下面的格式去写比较函数:
复制代码
代码如下:
function
f(a,
b)
{
if
(...)
{
return
1;
}
return
-1;
}
然后,我们要做的就是写出if里面的条件,这个条件就是返回a、b需要交换的条件。譬如:对var
a=["a","A","B","b"];进行不分大小写并从大到小排序,仅当a.toString().toLowerCase()
<
b.toString().toLowerCase()时,交换a、b,所以用此填充if条件即可。比较函数就是:
function
f(a,
b)
{
if
(a.toString().toLowerCase()
<
b.toString().toLowerCase())
{
return
1;
}
return
-1;
}
再譬如:要使数组的元素按先奇数后偶数的顺序排列,则若需a、b交换,仅当满足a是偶数且b是奇数条件即可,再按从小到大排序,仅当满足a、b均是奇数或偶数且a>b时即可。如下:
var
a
=
[1,
7,
3,
9,
5,
6,
2,
8,
4];
function
f(a,
b)
{
if
(0
==
a
%
2
&&
1
==
b
%
2)
{
return
1;
}
if
((1
==
a
%
2
&&
1
==
b
%
2
||
0
==
a
%
2
&&
0
==
b
%
2)
&&
a
>
b)
{
return
1;
}
return
-1;
}
alert(a.sort(f));
[Ctrl+A
全选
注:如需引入外部Js需刷新才能执行]
作者:JayChow