【发布时间】:2021-02-02 10:08:34
【问题描述】:
我正在 moment() 和 lodash 中寻找 React Web 应用程序的解决方案,以按升序和降序对日期进行排序。不幸的是,这些解决方案都不起作用。
const items = {
pageNumber: 1,
totalPages: 1,
content: [{
id: 8,
created: "2020-10-14T15:05:48.427601Z",
actor: "Anonymous",
rangeStart: "2020-10-14T11:54:05.610220Z",
rangeEnd: "2020-10-14T15:05:48.461905Z",
state: "InProgress",
amountOrderIds: 0,
amountOrderDetails: 0
},
{
id: 3,
created: "2020-8-11T11:54:05.610220Z",
actor: "houman",
rangeStart: "2020-10-11T11:54:05.610220Z",
rangeEnd: "2020-10-14T11:54:05.610220Z",
state: "Finished",
amountOrderIds: 0,
amountOrderDetails: 0
},
{
id: 2,
created: "2020-9-10T11:53:40.262608Z",
actor: "mo",
rangeStart: "2020-10-10T11:53:40.262608Z",
rangeEnd: "2020-10-11T11:53:40.262608Z",
state: "Finished",
amountOrderIds: 0,
amountOrderDetails: 0
},
{
id: 1,
created: "2020-10-09T11:53:25.911596Z",
actor: "leo",
rangeStart: "2020-10-09T11:53:25.911596Z",
rangeEnd: "2020-10-10T11:53:25.911596Z",
state: "Finished",
amountOrderIds: 0,
amountOrderDetails: 0
}
]
};
const sortByAsc = item => _.orderBy(item, () => moment(item.created), ['asc'])
const sortedAscList = (backorders) => {
const newBackorders = _.cloneDeep(backorders)
return _(newBackorders)
.orderBy(sortByAsc)
.compact()
.value()
}
const sortByDesc = item => _.orderBy(item, () => moment(item.created), ['desc'])
const sortedDescList = (backorders) => {
const newBackorders = _.cloneDeep(backorders)
return _(newBackorders)
.orderBy(sortByDesc)
.compact()
.value()
}
console.clear();
console.log('----------sortByAsc------------');
console.log(sortedAscList(items.content));
console.log('----------sortByDesc------------');
console.log(sortedDescList(items.content));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.1/moment.min.js"></script>
【问题讨论】:
-
不要在 orderBy 中使用时刻,使用日期
-
或者直接使用字符串,它会在基本排序算法中正确排序。
-
orderBy应该在链中使用两个参数调用。相反,您在每个项目上都调用_.orderBy,但似乎想要订购整个系列。正确的语法应该是_(newBackorders).orderBy(item => moment(item.created), ['asc']) -
@Nonik 你介意提供一个例子吗?
标签: javascript date momentjs lodash underscore.js