根据对象的某个属性(属性包含字母和数字
)进行排序
排序先根据字母排序,再按数字排序
//arr:所排序的数组
//attr:排序属性
function sortByAttributes(arr, attr) {
var reA = /[^a-zA-Z]/g;
var reN = /[^0-9]/g;
function sortAlphaNum(a, b) {
var aA = a.replace(reA, "");
var bA = b.replace(reA, "");
if (aA === bA) {
var aN = parseInt(a.replace(reN, ""), 10);
var bN = parseInt(b.replace(reN, ""), 10);
return aN === bN ? 0 : aN > bN ? 1 : -1;
} else {
return aA > bA ? 1 : -1;
}
}
let temp = [];
arr.forEach((item) => {
temp.push(item[attr]);
});
temp.sort(sortAlphaNum);
let result = [];
temp.forEach((p) => {
let obj = arr.find((k) => k[attr] == p);
if (obj) {
result.push(obj);
}
});
return result
}
let arr = [{
name: "G25",
},
{
name: "G15",
},
{
name: "S176",
},
{
name: "D175",
},
{
name: "H174",
},
{
name: "A16",
},
];
console.log(sortByAttributes(arr, 'name'));
结果