0x00 前言
做项目时需要对数组对象进行排序,但是因为需要排序的数组对象的属性为字符串数字,例CO001Z01-01,网上找的博客文章根本没讲到点子上,后来翻阅mdn找到了解决办法,遂写出来与大家分享一下。
0x01 代码
还是用的sort函数排序,但是因为js中字符串比较是使用charAt()进行一个个字符的比较,所以数字无法正常比较大小,比如2是要比12大的,所以这里比较函数中使用了localeCompare来返回值,localeCompare中的第三个参数为一个对象,其中的numeric参数设为true即可按照数字进行排序。具体参数可打开mdn进行查看。
var arr = [
{ code:"C01-10", index:12 },
{ code:"C01-7", index:11 },
{ code:"C01-12", index:15 },
{ code:"C01-24", index:13 }
];
function compare(p){ //这是比较函数
return function(m,n){
var a = m[p];
var b = n[p];
return a.localeCompare(b,'zh-CN',{ numeric: true });
}}
arr.sort(compare("code"));