## js数组的sort排序详解 转

文文1

``````<body>
<div>
sort()对数组排序，不开辟新的内存，对原有数组元素进行调换
</div>
<div id="showBox">
1、简单数组简单排序
<script type="text/javascript">
var arrSimple=new Array(1,8,7,6);
arrSimple.sort();
document.writeln(arrSimple.join());
</script>
</div>
<div>
2、简单数组自定义排序
<script type="text/javascript">
var arrSimple2=new Array(1,8,7,6);
arrSimple2.sort(function(a,b){
return b-a});
document.writeln(arrSimple2.join());
</script>
解释：a,b表示数组中的任意两个元素，若return > 0 b前a后；reutrn < 0 a前b后；a=b时存在浏览器兼容
简化一下：a-b输出从小到大排序，b-a输出从大到小排序。
</div>
<div>
3、简单对象List自定义属性排序
<script type="text/javascript">
var objectList = new Array();
function Persion(name,age){
this.name=name;
this.age=age;
}
objectList.push(new Persion('jack',20));
objectList.push(new Persion('tony',25));
objectList.push(new Persion('stone',26));
objectList.push(new Persion('mandy',23));
//按年龄从小到大排序
objectList.sort(function(a,b){
return a.age-b.age
});
for(var i=0;i<objectList.length;i++){
document.writeln('<br />age:'+objectList[i].age+' name:'+objectList[i].name);
}
</script>
</div>
<div>
4、简单对象List对可编辑属性的排序
<script type="text/javascript">
var objectList2 = new Array();
function WorkMate(name,age){
this.name=name;
var _age=age;
this.age=function(){
if(!arguments)
{
_age=arguments[0];}
else
{
return _age;}
}

}
objectList2.push(new WorkMate('jack',20));
objectList2.push(new WorkMate('tony',25));
objectList2.push(new WorkMate('stone',26));
objectList2.push(new WorkMate('mandy',23));
//按年龄从小到大排序
objectList2.sort(function(a,b){
return a.age()-b.age();
});
for(var i=0;i<objectList2.length;i++){
document.writeln('<br />age:'+objectList2[i].age()+' name:'+objectList2[i].name);
}
</script>
5.动态的根据数据排序
var data = [{name:'tom',age:'28'},{name:'cat',age:'29'}];
function createCompact(field){
return function(object1,object2){
var value1 = object1[field];
var value2 = object2[field];
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}
};
data.sort(createCompact('name'));
6.对Object数组排序的其他写法:
//定义一个比较器
function keysrt(key,desc) {
return function(a,b){
return desc ? ~~(a[key] < b[key]) : ~~(a[key] > b[key]);
}
}
//应用场景:
var ary=[{id:1,name:"b"},{id:2,name:"b"}];
ary.sort(keysrt('name',true));
ary.sort(keysrt('name',false));
ary.sort(keysrt('id',false));
</div>
</body>``````

1,sort(function(a,b){return a-b;})对传入的一对值进行比较，然后返回的的值为：小于0，大于0，等于0；（大于0交换位置，反之则不）

* 当小于0时，说明b>a，故b的排序靠后（即不变,以为默认按升序排序）.

* 当大于0时，说明a>b，故a的排序靠后(因为默认按照升序排序,如果a>b,所以a要排在b的后面).

* 当等于0时，说明a=b，故不改变排序.

### 文文1

JavaScript数组（一）——排序

JavaScript数组中有一个方法，可用于反转数组，如下代码所示： 但是多数情况下这并不能满足开发的需求，真实的情况往往是降序或升序排列。对数组进行排序很自然地会想到冒泡排序算法，下面我...

Bob2100
03/17
18
0

grootzhang
2016/06/17
0
0
[译] JavaScript 开发者经常忽略或误用的七个基础知识点

JavaScript 本身可以算是一门简单的语言，但我们也不断用智慧和灵活的模式来改进它。昨天我们将这些模式应用到了 JavaScript 框架中，今天这些框架又驱动了我们的 Web 应用程序。很多新手开发...

_大雁
2013/09/08
934
0

2018/07/24
0
0
JavaScript零基础入门——（八）JavaScript的数组

JavaScript零基础入门——（八）JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门，上一节课我们讲了有关JavaScript正则表达式的相关知识点，便于大家更好的对字符串进行处理。这一...

JandenMa
2018/06/19
89
0

Taro 兼容 h5 踩坑指南

dkvirus
46分钟前
3
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888

2
0
hash slot（虚拟桶）

4
0
Kafka 原理和实战

vivo互联网技术

19
0
java数据类型

audience_1

9
0