如何在嵌套数组中按日期对数组进行排序
how to sort an array by dates in a nested array
我有一个对象数组是从 REST API 中 return 编辑的。这些对象中的每一个都包含它自己的数组,如下所示:
{
"content": [
{
"id": 1,
"name": "Name 1",
"data": [
{
"id": "klqo1gnh",
"name": "Item 1",
"date": "2019-05-12"
}
]
},
{
"id": 2,
"name": "Name 2",
"data": [
{
"id": "klqo2fho",
"name": "Item 1",
"date": "2021-05-05"
},
{
"id": "klro8wip",
"name": "Item 2",
"date": "2012-05-05"
}
]
}
]
}
然后我映射数据,return它,像这样(这是一个非常精简的例子):
{content.map((item) => {
return (
<div>
{item.name}
{item.date}
{item.id}
</div>
);
})}
正如您所期望的那样。然而,我需要做的是按日期排序,最好使用 Moment.js
,在数组中找到包含最早日期的项目,然后首先显示该项目。例如,项目 "id": 2
包含日期 2012-05-05
,因为这是数据中最早的日期,所以我需要将该项目排在第一位。我真的迷路了,Moment 的文档不是很清楚。
提前致谢。
你可以创建一个函数,它接受一个 items
的数组作为参数,returns 一个按日期排序的新数组,使用 Moment.js,可能是这样的:
function sortByDate(items: any[]) {
return items.sort((first, second) => {
if (moment(first.data.date).isSame(second.data.date)) {
return -1; // If they have the same date, return the first item
} else if (moment(first.data.date).isBefore(second.data.date)) {
return -1; // If the first date is earlier, return the first item
} else {
return 1; // The second date is earlier, so it goes first;
}
})
}
那么在映射之前就可以使用这个函数了content
你用过JavaScript数组的排序方法吗?
array.sort((a, b) => a.value - b.value)
如果a.value - b.value
大于0,则b比a前一项。
我有一个对象数组是从 REST API 中 return 编辑的。这些对象中的每一个都包含它自己的数组,如下所示:
{
"content": [
{
"id": 1,
"name": "Name 1",
"data": [
{
"id": "klqo1gnh",
"name": "Item 1",
"date": "2019-05-12"
}
]
},
{
"id": 2,
"name": "Name 2",
"data": [
{
"id": "klqo2fho",
"name": "Item 1",
"date": "2021-05-05"
},
{
"id": "klro8wip",
"name": "Item 2",
"date": "2012-05-05"
}
]
}
]
}
然后我映射数据,return它,像这样(这是一个非常精简的例子):
{content.map((item) => {
return (
<div>
{item.name}
{item.date}
{item.id}
</div>
);
})}
正如您所期望的那样。然而,我需要做的是按日期排序,最好使用 Moment.js
,在数组中找到包含最早日期的项目,然后首先显示该项目。例如,项目 "id": 2
包含日期 2012-05-05
,因为这是数据中最早的日期,所以我需要将该项目排在第一位。我真的迷路了,Moment 的文档不是很清楚。
提前致谢。
你可以创建一个函数,它接受一个 items
的数组作为参数,returns 一个按日期排序的新数组,使用 Moment.js,可能是这样的:
function sortByDate(items: any[]) {
return items.sort((first, second) => {
if (moment(first.data.date).isSame(second.data.date)) {
return -1; // If they have the same date, return the first item
} else if (moment(first.data.date).isBefore(second.data.date)) {
return -1; // If the first date is earlier, return the first item
} else {
return 1; // The second date is earlier, so it goes first;
}
})
}
那么在映射之前就可以使用这个函数了content
你用过JavaScript数组的排序方法吗?
array.sort((a, b) => a.value - b.value)
如果a.value - b.value
大于0,则b比a前一项。