JavaScript数组排序问题:先按group字母排序,再按priority数值排序
解决方案:按Group字母排序后再按Priority数值排序
你可以通过在排序函数中先判断group的排序结果,当group相同时再比较priority的方式实现需求,完整代码如下:
const arrayToSort = [{ priority: 1, group: "a", id: "promo1" }, { priority: 3, group: "a", id: "promo1" }, { priority: 2, group: "a", id: "promo1" }, { priority: 1, group: "b", id: "promo2" }, { priority: 2, group: "e", id: "promo3" }, { priority: 2, group: "c", id: "promo4" }, { priority: 1, group: "f", id: "promo5" }, { priority: 3, group: "d", id: "promo6" }, { priority: 1, group: "g", id: "promo7" } ]; arrayToSort.sort((v1, v2) => { // 先按group字段做字母排序 const groupSortResult = v1.group.localeCompare(v2.group); // 如果group不同,直接返回排序结果 if (groupSortResult !== 0) { return groupSortResult; } // 若group相同,按priority字段做数值升序排序 return v1.priority - v2.priority; }); console.log(arrayToSort);
代码说明:
- 使用
localeCompare处理group的字母排序,比直接用>或<更可靠,能正确处理所有字母场景(包括特殊字符、不同语言环境),相等时返回0。 - 当两个元素的group一致时,通过
v1.priority - v2.priority实现数值升序排序;如果需要降序,只需改为v2.priority - v1.priority。
排序后的输出结果:
[ { priority: 1, group: 'a', id: 'promo1' }, { priority: 2, group: 'a', id: 'promo1' }, { priority: 3, group: 'a', id: 'promo1' }, { priority: 1, group: 'b', id: 'promo2' }, { priority: 2, group: 'c', id: 'promo4' }, { priority: 3, group: 'd', id: 'promo6' }, { priority: 2, group: 'e', id: 'promo3' }, { priority: 1, group: 'f', id: 'promo5' }, { priority: 1, group: 'g', id: 'promo7' } ]
内容的提问来源于stack exchange,提问作者Bartek
相关产品推荐
相关产品推荐

