上代码,测试用例直接弄他,代码在线测试,正则在线测试
var arrData=[{
name:'史密斯',
age:18,
birthday:'2003-01-08'
},{
name:'丹妮',
age:16,
birthday:'2005-06-08'
},{
name:'艾米',
age:24,
birthday:'1997-07-08'
}];
/**对对象数组排序
*arr:要排序的数据源,key:数据源中排序的键名,type:排序方式
*/
function sortObjArr(arr, key, type = 'asc') {
if(arr&&arr.length){
if (/^(date|time)|(date|time)$/gi.test(key)) { // 日期时间类型,这个正则就是找键为date或time开头或结尾的单词
arr.sort((a, b) => {
if (type === 'asc') { // 升序
return new Date(a[key]).getTime() - new Date(b[key]).getTime();
}
return new Date(b[key]).getTime() - new Date(a[key]).getTime();
});
} else if (isNaN(arr[0][key])) { // 中文
arr.sort((a, b) => {
if (type === 'desc') { // 降序
return a[key].localeCompare(b[key], 'zh');
}
return b[key].localeCompare(a[key], 'zh');
});
} else {// 其他数值
arr.sort((a, b) => {
if (type === 'asc') {
return a[key] - b[key];
}
return b[key] - a[key];
});
}
}
}
sortObjArr(arrData,'name','desc');
console.log('名字降序',arrData);
|