React标准日期格式是什么?按YYYY-MM-DD HH:MM:SS日期排序失效如何解决
问题原因
- 日期格式兼容性问题:你使用的
YYYY-MM-DD HH:MM:SS格式不属于ECMAScript标准强制要求支持的日期解析格式,部分浏览器解析这类带空格的日期字符串时会返回Invalid Date,两个非法日期相减结果为0,排序函数会判定所有元素优先级相同,最终保留原数组顺序。 Array.sort()是原地排序方法,会直接修改原数组,你赋值得到的sorted_meetings和原notifications是同一个数组的引用,加上浏览器控制台打印引用类型时的懒求值特性,就会出现两次打印结果完全一致的情况。
解决方案
不需要完全修改原有日期格式,只需要在解析前做简单的兼容处理即可,同时建议拷贝数组后再排序,避免污染原数据,示例代码如下:
// 先拷贝原数组,避免原地修改 const sorted_meetings = [...notifications].sort((a, b) => { // 把日期字符串中的空格替换为T,转为标准RFC3339格式,兼容所有浏览器解析 const timeA = new Date(a.timestamp.replace(' ', 'T')).getTime() const timeB = new Date(b.timestamp.replace(' ', 'T')).getTime() // 倒序排序返回timeB - timeA,正序排序返回timeA - timeB return timeB - timeA }) // 打印时转成JSON可避免懒求值干扰,直接确认排序结果 console.log(JSON.stringify(sorted_meetings, null, 2))
内容的提问来源于stack exchange,提问作者maximum360
相关产品推荐
相关产品推荐

