Reactjs 在React数据库调用上按日期排序不起作用-只返回最早的
我有一个Strapi CMS,我试图按照从最新到最旧的顺序对博客文章进行排序。我是通过“published_at”属性来实现的。今天早上我在谷歌上搜索了一下,发现最明智的解决方案是使用“sort()” 然而,它不起作用,我不明白为什么 以下是我正在尝试的代码:Reactjs 在React数据库调用上按日期排序不起作用-只返回最早的,reactjs,Reactjs,我有一个Strapi CMS,我试图按照从最新到最旧的顺序对博客文章进行排序。我是通过“published_at”属性来实现的。今天早上我在谷歌上搜索了一下,发现最明智的解决方案是使用“sort()” 然而,它不起作用,我不明白为什么 以下是我正在尝试的代码: const posts = await strapiInstance.getEntries('blog-posts') const sortedPosts = posts.sort((a, b) => b.published
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"
我想知道在排序之前是否需要将其转换为整数
但任何反馈都将不胜感激。试试看,只需在排序回调中交换a&b即可
const posts = await strapiInstance.getEntries('blog-posts')
const sortedPosts = posts.sort((a, b) => a.published_at - b.published_at)
console.log(sortedPosts)
published\u 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)
)
或者在将它们转换为日期后进行比较(如果总是返回有效的日期字符串)
转换为日期的选项2非常干净,工作非常完美。谢谢你的帮助@如果您的后端可以在处返回
published\u的null
或空值,则在使用该解决方案时应小心。谢谢你的帮助。
const sortedPosts = posts.sort((a, b) => new Date(b.published_at) - new Date(a.published_at))