无需创建Date对象对含字符串日期的对象数组排序并过滤null值
问题解答
1. 日期字符串是否属于ISO日期?
你给出的"2022-10-09"这类YYYY-MM-DD格式的字符串,属于ISO 8601日期标准的简化形式,完全符合ISO日期规则。这类字符串的字典排序顺序和实际日期的时间顺序完全一致,这也是我们能直接用字符串比较实现排序的核心前提。
2. 无需创建Date对象的实现方案
完全可以做到,直接利用字符串特性结合数组方法就能完成过滤和排序:
const originalArray = [{name: "First", updated: "2022-10-09"},{name: "Second", updated: "null"},{name: "Third", updated: "2022-12-06"}]; // 先过滤无效项,再按日期降序排序 const sortedResult = originalArray .filter(item => item.updated !== "null") .sort((a, b) => b.updated.localeCompare(a.updated)); console.log(sortedResult);
执行后得到的结果完全符合预期:
[{name: "Third", updated: "2022-12-06"},{name: "First", updated: "2022-10-09"}]
逻辑说明
- 过滤:直接判断
updated字段是否不等于"null",快速剔除无效数据; - 排序:借助ISO日期字符串的特性,用
localeCompare方法做字符串反向比较(b和a交换位置),就能实现日期的降序排列,全程不需要创建Date对象。
内容的提问来源于stack exchange,提问作者Joseph Walsh
相关产品推荐
相关产品推荐

