如何用sort()方法对二维JavaScript数组按名称及日期排序?
当然可以用
sort()实现这个嵌套数组的排序需求! JavaScript的Array.sort()方法支持自定义比较函数,正好能满足你“先按名称字母序,再按日期从旧到新”的排序优先级。下面是具体的实现方案:
核心实现代码
const originalArray = [['BBB','2020-10-20'],['AAA','2020-10-25'],['BBB','2020-10-19'],['EEE','2020-11-19'],['AAA','2020-10-10']]; // 自定义排序比较函数 const sortedArray = originalArray.sort((a, b) => { // 第一步:按名称的字母顺序比较 const nameDiff = a[0].localeCompare(b[0]); // 如果名称不同,直接用名称的比较结果排序 if (nameDiff !== 0) { return nameDiff; } // 第二步:名称相同时,按日期从旧到新排序 // 利用YYYY-MM-DD格式的字符串字典序与日期顺序一致的特性,直接比较字符串 return a[1].localeCompare(b[1]); // 或者用Date对象比较(兼容性更强,适合非标准日期格式): // return new Date(a[1]) - new Date(b[1]); }); console.log(sortedArray); // 输出结果: // [['AAA','2020-10-10'],['AAA','2020-10-25'],['BBB','2020-10-19'],['BBB','2020-10-20'],['EEE','2020-11-19']]
代码逻辑解释
- 名称排序:使用
String.localeCompare()方法比较两个名称字符串,它会返回负数(a排在b前)、0(相等)、正数(b排在a前),完美适配sort()的比较函数要求。如果需要忽略大小写,可以添加参数:a[0].localeCompare(b[0], undefined, { sensitivity: 'base' })。 - 日期排序:因为你的日期是
YYYY-MM-DD格式,这种格式的字符串字典序和实际日期顺序完全一致,所以直接用localeCompare()比较字符串就足够高效。如果遇到非标准格式的日期,再用new Date()转成日期对象后相减,旧日期的时间戳更小,相减后返回负数,会排在前面。
注意事项
Array.sort()是原地排序,会修改原数组。如果不想修改原数组,可以先复制一份再排序:[...originalArray].sort(...)或者originalArray.slice().sort(...)。
内容的提问来源于stack exchange,提问作者TityBoi
相关产品推荐
相关产品推荐

