对数组中的对象排序

需求:
设计一个列表,包含:地域、百分比、人数、时间。请实现按照 人数 与 时间 的排序算法。

数据结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
var data = [
{
area: '深圳',
percentage: 15,
number: 80,
staytime: 2
},
{
area: '北京',
percentage: 30,
number: 150,
staytime: 4
},
{
area: '广州',
percentage: 25,
number: 60,
staytime: 3
},
{
area: '上海',
percentage: 30,
number: 100,
staytime: 4
}
];

封装排序函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
* 根据指定的字段和规则排序数据
* data Array 要排序的数据
* field string 排序依据的字段
* rule string 排序规则 DESC(降序) / ASC(增序)
* throw
* data is invalid : 要排序的数据不存在或类型不正确
* field is invalid : 排序参考字段不存在
* return Array 排序后的数据
*/


var mySort = function (data, field, rule){
if ( !(data instanceof Array) ) {
alert('数据不存在')
}
if ( !(field in data[0]) ) {
alert('排序参考字段不存在');
}
if ( !rule || ['DESC','ASC'].indexOf( (rule=rule.toString().toUpperCase()) ) == -1 ) {
rule = 'DESC'; //默认为降序
}

data.sort(function (a, b){
var v = a[field] - b[field];
return rule == 'ASC'? v:-v;
})
}

使用

1
2
3
mySort(data,'number','ASC'); // 若第三个参数不写,则默认为DESC

console.log(data);