按日期排序对象数组求助:附JSON数据结构示例
按date字段排序对象数组的解决方案
没问题!要给你手里这个包含date字段的对象数组排序,用JavaScript的数组sort()方法就能轻松搞定,下面分几种情况给你具体实现:
1. 基础升序排序(从最早日期到最晚)
因为你的date是YYYY-MM-DD的ISO标准格式,我们可以把字符串转成Date对象,通过时间戳的差值来比较顺序:
// 原地修改原数组,按日期升序排列 model.sort((a, b) => { const dateA = new Date(a.date); const dateB = new Date(b.date); // 时间戳相减,正数则b排在a后面,负数则a排在b后面 return dateA.getTime() - dateB.getTime(); });
2. 降序排序(从最晚日期到最早)
只需要把上面的差值顺序反过来就行:
// 原地修改原数组,按日期降序排列 model.sort((a, b) => { const dateA = new Date(a.date); const dateB = new Date(b.date); return dateB.getTime() - dateA.getTime(); });
3. 更简洁的写法(利用ISO字符串特性)
ISO格式的日期字符串(YYYY-MM-DD)的字典序和时间顺序是完全一致的,所以我们可以直接比较字符串,省去转Date对象的步骤:
// 升序(直接比较字符串) model.sort((a, b) => a.date.localeCompare(b.date)); // 降序 model.sort((a, b) => b.date.localeCompare(a.date));
小提示:避免修改原数组
sort()方法会直接修改原数组,如果想要保留原数组不变,可以先创建一个数组副本再排序:
// 创建原数组的浅拷贝,再排序,原数组不受影响 const sortedModel = [...model].sort((a, b) => new Date(a.date) - new Date(b.date));
内容的提问来源于stack exchange,提问作者Simon Dean
相关产品推荐
相关产品推荐

