如何先按属性排序对象数组,再对同属性项按字母排序?
解决方案:多条件排序(分类优先,标题次之)
你只需要在排序函数中先判断分类的比较结果,当分类相同时再对标题进行排序即可。修改后的代码如下:
array.sort((a, b) => { // 先按category倒序排序,保持你原本的逻辑 const categoryCompare = -b.category.localeCompare(a.category); // 如果category不同,直接返回分类的排序结果 if (categoryCompare !== 0) { return categoryCompare; } // 同分类内,按title的字母顺序正序排序 return a.title.localeCompare(b.title); });
逻辑说明
- 分类排序优先级更高:先执行
-b.category.localeCompare(a.category),维持你原本的分类倒序规则; - 同分类内标题排序:当两个对象的分类完全相同时(此时
categoryCompare等于0),转而用localeCompare比较title的字母顺序,该方法会自动适配多语言的排序规则。
示例数组排序后结果
执行上述代码后,你的示例数组会变为:
[ {title: 'Good', category: 'something else'}, {title: 'Evening', category: 'something'}, {title: 'Hello', category: 'something'}, {title: 'Monday', category: 'something'}, {title: 'Food', category: 'others'} ]
内容的提问来源于stack exchange,提问作者sir-haver
相关产品推荐
相关产品推荐

