如何修正排序函数,实现字符型code在前、纯数字code在后的排序?
修正排序函数实现指定规则
原排序逻辑是按字符串的Unicode编码顺序比较,数字字符的编码值比字母小,所以纯数字的code会排在字母开头的code前面,不符合你的需求。以下是修正后的排序函数:
const sortData = (data) => { return data.sort((a, b) => { // 判断code是否为纯数字 const isAPureNum = /^\d+$/.test(a.code); const isBPureNum = /^\d+$/.test(b.code); // 纯数字和非纯数字的优先级判断:非纯数字在前 if (isAPureNum && !isBPureNum) { return 1; } if (!isAPureNum && isBPureNum) { return -1; } // 同类型的按字符串自然顺序排序 return a.code.localeCompare(b.code); }); }; const myObj = [{code: 'b1111'}, {code: '2222'}, {code: 'a1111'}]; console.log(sortData(myObj));
逻辑说明
- 用正则表达式
/^\d+$/判断code是否为纯数字(从开头到结尾全由数字组成) - 当两个元素类型不同时,强制让非纯数字的元素排在前面
- 当两个元素类型相同时,使用
localeCompare方法按字符串自然顺序排序(比直接用</>更稳定,支持多语言场景)
运行后会得到你期望的结果:
[ { code: 'a1111' }, { code: 'b1111' }, { code: '2222' } ]
内容的提问来源于stack exchange,提问作者John Glabb
相关产品推荐
相关产品推荐

