使用transform-items对Algolia命中结果按日期排序的技术问询
解决方案:按
product_event字段排序事件分类结果 直接在isEventsActive的判断分支里,对结果数组按product_event字段进行排序即可,以下是完整的transformItems函数实现:
transformItems(items) { if (this.isEventsActive) { // 创建数组副本避免修改原数据,按日期升序排序(早的在前) return [...items].sort((a, b) => { // 将product_event转为Date对象,通过减法比较时间先后 return new Date(a.product_event) - new Date(b.product_event); // 若需要降序(晚的在前),替换为: // return new Date(b.product_event) - new Date(a.product_event); }); } else { // 原随机排序逻辑保持不变 for ( let j, x, i = items.length; i; j = Math.floor(Math.random() * i), x = items[--i], items[i] = items[j], items[j] = x ); return items; } },
关键说明
- 数组副本:使用
[...items]创建原数组的浅拷贝,因为sort()方法会原地修改数组,避免影响其他逻辑中的原数据。 - 日期比较:
- 如果
product_event是ISO格式的字符串(如2024-05-20、2024-05-20T14:30:00),new Date()可以直接解析,通过减法得到时间差来排序。 - 如果
product_event是数字类型的时间戳,可简化为return a.product_event - b.product_event(升序),无需转换为Date对象。
- 如果
- 异常处理(可选):如果存在部分事件缺失
product_event字段的情况,可以添加判断逻辑,将缺失字段的条目排到末尾:return [...items].sort((a, b) => { if (!a.product_event) return 1; if (!b.product_event) return -1; return new Date(a.product_event) - new Date(b.product_event); });
内容的提问来源于stack exchange,提问作者Tyssen
相关产品推荐
相关产品推荐

