如何对JavaScript嵌套数组先按日期升序再按姓氏升序排序
正确实现代码
sets.sort((a, b) => { // 工具方法:将MM/DD/YYYY格式的日期转为时间戳用于比较 const getDateStamp = (dateStr) => { const [month, day, year] = dateStr.split('/'); return new Date(`${year}-${month}-${day}`).getTime(); } // 优先比较日期:升序排列 const dateDiff = getDateStamp(a[3]) - getDateStamp(b[3]); if (dateDiff !== 0) { return dateDiff; } // 日期相同则按姓氏升序排列 return a[0].localeCompare(b[0]); });
逻辑说明
- 直接对整个
sets数组调用原生sort方法即可,不需要遍历子数组,排序过程只会调整子数组的先后顺序,不会修改每个子数组内部的字段位置,完全符合你的需求。 - 比较逻辑自动实现多级判断:先按日期升序排列,日期相等时自动触发姓氏排序规则,不需要写死特定日期判断,所有同日期的条目都会按姓氏排序。
你之前代码的问题
- 第一个写法报错是因为
arr[3]是字符串类型,只有数组才有sort方法,你尝试给单个字符串执行排序操作必然报错。同时排序是针对整个sets数组的子元素顺序调整,不需要用map遍历每个子数组单独处理。 - 第二个写法逻辑错误:你在遍历每个子元素的过程中反复对整个
sets数组执行排序,且判断条件写死了固定日期,不具备通用性。
内容的提问来源于stack exchange,提问作者rams141
相关产品推荐
相关产品推荐

