localeCompare() 方法返回一个数字来指示一个参考字符串是否在排序顺序前面或之后或与给定字符串相同。
//原始数据
var a = ['欧阳鹏','欧阳鹏b','欧阳鹏a', '赵芳', '陈诚', 'a', 'b', '1', '2', '12', '300'];
>a.sort();
>["1", "12", "2", "300", "a", "b", "欧阳鹏", "欧阳鹏a", "欧阳鹏b", "赵芳", "陈诚"]
>a.sort(function(a, b){return a.localeCompare(b)})
>["1", "12", "2", "300", "陈诚", "欧阳鹏", "欧阳鹏a", "欧阳鹏b", "赵芳", "a", "b"]
说明:可以看到这个结果离预期已经很近的,但是我希望字符串"a","b"排在汉字前面
function sort(a, b){
var n = !isNaN(a - 0), n2 = !isNaN(b - 0);
// 数字优先
if (n && n2) {
return a - b;
} else if (n) {
return -1;
} else if (n2) {
return 1;
}
// 将含有汉字的使用localeCompare排序
var e = escape(a).indexOf("%u") > -1, e2 = escape(b).indexOf("%u") > -1
if (e && e2) {
return a.localeCompare(b);
} else if (e) {
return 1;
} else if (e2) {
return -1;
}
return a.localeCompare(b);
}
结果如下:
["1", "2", "12", "300", "a", "b", "陈诚", "欧阳鹏", "欧阳鹏a", "欧阳鹏b", "赵芳"]