day-08-数组sort排序自定义
Opened this issue · 2 comments
H246802 commented
写一个 byField
函数,实现数组按姓名、年纪任意字段排序
var users = [
{ name: 'John', age: 20, company: 'Baidu' },
{ name: 'Pete', age: 18, company: 'Alibaba' },
{ name: 'Ann', age: 19, company: 'Tencent' }
];
users.sort(byField('company'))
// 输出
/*
[
{ name: 'Pete', age: 18, company: 'Alibaba' },
{ name: 'John', age: 20, company: 'Baidu' },
{ name: 'Ann', age: 19, company: 'Tencent' }
];
*/
users.sort(byField('name'))
// 输出
/*
[
{ name: 'Ann', age: 19, company: 'Tencent' },
{ name: 'John', age: 20, company: 'Baidu' },
{ name: 'Pete', age: 18, company: 'Alibaba' },
];
*/
H246802 commented
针对数组对象排序
function byField(name) {
return function (o, p) {
var a = o[name]
var b = p[name]
if (typeof o === 'object' && typeof p === 'object' && o && p) {
if (a === b) {
return 0
}
if (typeof a === typeof b) {
return a > b ? 1 : -1
}
return typeof a > typeof b ? 1 : -1
} else {
throw{
name: 'Error',
message: 'Expected an object when sorting by' + name
}
}
}
}
H246802 commented
普通数字字符排序
function byField(a,b){
return a > b ? 1 : -1
}