分享下如何写JS数组sort的比较函数
2010-06-30 22:23
239 查看
// function runCode(id) {
var code = document.getElementById(id).value;
if (code != "") {
var newwin = window.open('', '', '');
newwin.opener = null;
newwin.document.write(code);
newwin.document.close();
}
}
// ]]>
我们知道,数组的sort方法可以对数组元素进行排序,默认是按ASCII字母表顺序排序。如果要根据其他的顺序排序就需要为sort方法提供一个比较函数作为参数。这里讲的就是如何写这个比较函数。
譬如:
var a=[1,5,3,7];
a.sort(function(a, b) { return b-a});//从大到小排列
那如果复杂点的顺序应该如何写这个比较函数呢。
对于比较函数function f(a,b){...} ,若返回正数,则说明a和b需要交换,否则不交换。所以我们可以通通根据下面的格式去写比较函数:
然后,我们要做的就是写出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时即可。如下:
<script type="text/javascript">
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));
</script>
var code = document.getElementById(id).value;
if (code != "") {
var newwin = window.open('', '', '');
newwin.opener = null;
newwin.document.write(code);
newwin.document.close();
}
}
// ]]>
我们知道,数组的sort方法可以对数组元素进行排序,默认是按ASCII字母表顺序排序。如果要根据其他的顺序排序就需要为sort方法提供一个比较函数作为参数。这里讲的就是如何写这个比较函数。
譬如:
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时即可。如下:
<script type="text/javascript">
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));
</script>
相关文章推荐
- 如何写JS数组sort的比较函数
- 如何写JS数组sort的比较函数
- js中 数组重排序之比较函数
- 深入探讨JS中的数组排序函数sort()和reverse()
- Js数组排序函数sort()介绍
- js 函数中如何传递数组参数
- Js数组排序函数:sort()
- JS-比较函数中嵌套函数,可以排序【对象数组】
- js:数组重排序问题:如何使用sort()方法按数值的大小进行升序或降序排列
- Js数组排序函数sort()介绍
- sort/map/unordered_map自定义类型如何构造比较函数
- 深入探讨JS中的数组排序函数sort()和reverse()
- js 数组排序函数sort
- JS中的数组排序函数-sort()与revsrse()
- Js数组排序函数:sort()
- Js数组排序函数sort()介绍
- Js数组排序函数sort(by)
- JS数组排序函数sort()、reverse()
- Js数组排序函数sort()介绍
- JS中的数组排序函数sort()和reverse()