# 对人员以 age 排序,时间复杂度O(n)
- 1.主要借助一个 0-150 岁的年纪数组 originArr
- 2.然后对传入的员工实体遍历,发现一个人就把对应的年纪对应的 originArr 下标加一
为了排序之后输出人员实体,还顺便挂载一个员工实体到 originArr 上
- 3.对 originArr 遍历安装年纪数组把人员拿出来
```
//接收一个员工实体的对象数组
function sortByAge(arr) {
if(arr.constructor.name !== 'Array'){
return '请传入数组再试'
}
if(arr.length < 2){
return arr;
}
var originArr = getArrArr(0,150);
arr.map(function (person) {
originArr[person.age].time++;
if(originArr[person.age].person){
originArr[person.age].person.push(person);
}else {
originArr[person.age].person = [person];
}
});
var resArr = [];
//todo 优化 originArr 的length <= arr
originArr.map(function (t) {
for(var i = 0; i < t.time; i++){
resArr.push(t.person.pop());
}
});
return resArr;
}
//生成一个员工包含任意员工年龄的数组
function getArrArr(f, to) {
var res = [];
for(var i = f; i <= to; i++){
var ageItem = {
time: 0
};
res.push(ageItem)
}
return res;
}
var testArr1 = [
{
'age':32,
'name':"张三"
},
{
'age':20,
'name':"张三"
},
{
'age':29,
'name':"张三"
},
{
'age':20,
'name':"张三"
},
]
var testArr = null;
sortByAge(testArr1);
sortByAge({});
sortByAge([]);
```
当然程序存在一些优化点,我这边主要记录这个思路。