首页 > 解决方案 > 在 React 数据库调用不起作用时按日期排序 - 只是先返回最旧的

问题描述

我有一个 Strapi CMS,我正在尝试按最新到最旧的顺序对博客文章进行排序。我通过“published_at”属性来做到这一点。今天早上我做了一些谷歌搜索,并认为最明智的解决方案是使用'sort()'。

但是,它不起作用,我不明白为什么。

这是我正在尝试的代码:

  const posts = await strapiInstance.getEntries('blog-posts')
  const sortedPosts = posts.sort((a, b) => b.published_at - a.published_at)
  console.log(sortedPosts)

控制台日志如下所示:

0 Object

Author: "Jon Nicholson"

published_at: "2020-11-20T08:48:08.875Z"

updatedAt: "2020-12-06T10:59:31.723Z"

1 Object

Author: "Jon Nicholson"

published_at: "2020-11-26T08:51:52.414Z"

updatedAt: "2020-12-06T10:59:44.081Z"

我想知道是否需要在排序之前将其转换为整数?

但任何反馈将不胜感激。

标签: reactjs

解决方案


published_at是一个字符串参数,所以如果你对它们使用减法运算,它会返回NaN. 您可以在控制台上对此进行测试:

"2020-11-20T08:48:08.875Z" - "2020-11-26T08:51:52.414Z"

还有其他两个选项:按字符串比较

const sortedPosts = posts.sort((a, b) =>
  (b.published_at > a.published_at) 
    ? 1
    : (b.published_at === a.published_at ? 0 : -1)
)

或在将它们转换为日期后进行比较(如果它总是返回有效的日期字符串)

const sortedPosts = posts.sort((a, b) => new Date(b.published_at) - new Date(a.published_at))

推荐阅读