You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lodash sortBy:基于布尔值及附加条件排序数组

解决布尔值+日期条件的数组排序问题

我来帮你梳理下当前代码的问题,然后给出可行的解决方案~

首先,你用的sortBy(应该是Lodash的工具函数吧?)的回调逻辑有点问题:sortBy需要你返回用于排序的权重值,而不是直接返回post对象。你之前的写法里,条件满足时返回post,不满足时默认返回undefined,这种逻辑是不可靠的——因为undefined和对象之间的比较不会按照你预期的规则生效。

你的核心需求应该是:仅当帖子是置顶帖(featured_post === true)且发布日期不早于今天(date >= today)时,把这类帖子排在数组最前面,其他帖子保持原有顺序或按额外规则排序?

那正确的写法应该是给符合双条件的帖子返回更小的排序权重(比如0),不符合的返回更大的权重(比如1),这样sortBy会自动把权重小的内容排到前面:

// 先定义today,注意要确保date的格式和today匹配(比如都是Date对象或时间戳)
const today = new Date();
today.setHours(0, 0, 0, 0); // 可选:清零时间部分,只比较日期维度

posts = _.sortBy(posts, [function(post) {
  // 符合双条件返回0,其余返回1
  return (post.featured_post === true && post.date >= today) ? 0 : 1;
}]);

如果除了置顶优先级,你还想给剩下的帖子加额外排序规则(比如按发布日期倒序),可以在sortBy的参数数组里再加一个回调:

posts = _.sortBy(posts, [
  function(post) {
    return (post.featured_post === true && post.date >= today) ? 0 : 1;
  },
  function(post) {
    // 剩余帖子按日期倒序,用负号实现降序逻辑
    return -new Date(post.date).getTime();
  }
]);

最后补充个小提醒:如果你的post.date是字符串格式,记得先转换成Date对象再和today比较,避免因格式不匹配导致判断错误哦~

内容的提问来源于stack exchange,提问作者Merc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:18:40