Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在React数据库调用上按日期排序不起作用-只返回最早的_Reactjs - Fatal编程技术网

Reactjs 在React数据库调用上按日期排序不起作用-只返回最早的

Reactjs 在React数据库调用上按日期排序不起作用-只返回最早的,reactjs,Reactjs,我有一个Strapi CMS,我试图按照从最新到最旧的顺序对博客文章进行排序。我是通过“published_at”属性来实现的。今天早上我在谷歌上搜索了一下,发现最明智的解决方案是使用“sort()” 然而,它不起作用,我不明白为什么 以下是我正在尝试的代码: const posts = await strapiInstance.getEntries('blog-posts') const sortedPosts = posts.sort((a, b) => b.published

我有一个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"
我想知道在排序之前是否需要将其转换为整数


但任何反馈都将不胜感激。

试试看,只需在排序回调中交换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))