如何对键为字符串日期的JavaScript对象按日期降序排序
解决方案
你原有思路的核心逻辑是正确的,我们可以通过去除冗余变量、使用JS数组内置方法简化代码,同时不损失运行效率。
最简实现
function sortthedates(unsorted){ return Object.keys(unsorted) .sort((a, b) => new Date(b) - new Date(a)) .reduce((sorted, key) => (sorted[key] = unsorted[key], sorted), {}); }
代码说明
- 移除了原代码中无意义的冗余变量,逻辑更清晰
- 用
reduce方法替代手动for循环构建新对象,代码更简洁 - 若你更偏好可读性优先的写法,可将
reduce部分改为标准写法:
function sortthedates(unsorted){ return Object.keys(unsorted) .sort((a, b) => new Date(b) - new Date(a)) .reduce((sorted, key) => { sorted[key] = unsorted[key]; return sorted; }, {}); }
高性能优化(针对大数据量场景)
如果你的业务场景需要处理上万个及以上的日期键,可以提前缓存每个键对应的时间戳,避免排序过程中重复创建Date实例、重复解析日期,进一步提升性能:
function sortthedates(unsorted){ // 提前缓存每个日期键对应的时间戳,仅解析一次 const keyWithTimestamp = Object.keys(unsorted).map(key => ({ key, timestamp: new Date(key).valueOf() })); return keyWithTimestamp .sort((a, b) => b.timestamp - a.timestamp) .reduce((sorted, { key }) => { sorted[key] = unsorted[key]; return sorted; }, {}); }
上述所有实现的排序结果和你原有代码完全一致,保留原字符串格式的日期键,按日期从新到旧排序。
内容的提问来源于stack exchange,提问作者Tomtetot
相关产品推荐
相关产品推荐

