如何解决Lodash:orderBy如何通过将排序列表文档放在不需排序的字段的顶部?
我正在使用Firebase和Firestore,并且有一个名为singers
的旧集合,其中包含具有某些构造的文档,例如
name: string
genre: string,...
现在,我需要从前端的集合中订购这些文档,并且需要按照从最早到最新的顺序进行操作,但是如果没有createdAt
之类的字段,我将无法执行,因为firestore并不提供有关文档创建时间的任何信息。
我做什么
首先在注册时添加了字段createdAt
,现在新创建的歌手具有字段createdAt
,但旧歌手则没有。所以我想按顺序订购它:
- 所有歌手(无字段
createdAt
或其他任意字段的歌手) - 字段为
createdAt
的歌手从最早的到最新的
示例数据
const singers = [
{
name: 'Phil',genre: 'Pop',...
},{
name: 'Bom',genre: 'Rock',{
name: 'Tom',genre: 'Hiphop',createdAt: 190000000,{
name: 'John',createdAt: 195000000,]
const sortedSingers = orderBy(
singers,// collection with all singers from firestore
[singer => (singer.createdAt?? singer.name)],['desc'],);
它以错误的顺序呈现:
- 汤姆
- 约翰
- Bom
- 菲尔
我想这样订购:
- Bom / Phil
- Bom / Phil
- 汤姆
- 约翰
如何使orderBy
的无序字段的文档排在列表的开头?
解决方法
我做了这样的事情:
const singerCreatedAt: any = singers.map((singer: Singer) =>
singer.createdAt
? { ...singer,createdAt: singer.createdAt?.toDate() }
: { ...singer,createdAt: new Date(190000000000) },);
const sortedSingers = orderBy(singerCreatedAt,['createdAt','asc']);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。