如何在JavaScript中按两个键对对象数组进行排序
对象数组双字段排序(空字符串优先)
要实现你需要的排序效果,只需在现有排序逻辑基础上,增加PRIORITY字段的二次判断即可,具体实现如下:
原始数组
var data = [ {COMPONENT: 'PM-ABC', PRIORITY: '0.35'}, {COMPONENT: 'PM', PRIORITY: '0.35'}, {COMPONENT: 'PM', PRIORITY: ''} ];
修改后的排序代码
data.sort(function(a, b) { // 先按COMPONENT升序比较 const cmpComponent = a.COMPONENT.localeCompare(b.COMPONENT); if (cmpComponent !== 0) { return cmpComponent; } // COMPONENT相同时,处理PRIORITY排序:空字符串优先 if (a.PRIORITY === '') return -1; if (b.PRIORITY === '') return 1; // 非空时按字符串升序排列 return a.PRIORITY.localeCompare(b.PRIORITY); });
逻辑说明
- 先用
localeCompare处理COMPONENT的升序排序,这个方法比手动判断>/<更适配字符串的自然排序规则,能正确处理带连字符的字符串(比如PM和PM-ABC的比较) - 当两个元素的
COMPONENT字段相同时,进入PRIORITY的判断:- 如果当前元素的
PRIORITY是空字符串,直接让它排在前面(返回-1) - 如果对比元素的
PRIORITY是空字符串,让对比元素排在前面(返回1) - 两者都非空时,继续用
localeCompare做升序排序
- 如果当前元素的
最终排序结果
[ {COMPONENT: 'PM', PRIORITY: ''}, {COMPONENT: 'PM', PRIORITY: '0.35'}, {COMPONENT: 'PM-ABC', PRIORITY: '0.35'} ]
内容的提问来源于stack exchange,提问作者ankit lohiya
相关产品推荐
相关产品推荐

