【发布时间】:2020-06-17 04:13:03
【问题描述】:
我有一个包含类的数组(该类称为Note),在这些类中是基本值。两个重要的值是Note.Pinned(布尔值,无论是否固定)和Note.Modified(上次编辑时的时间戳)。
我想按Modified 时间戳对这个类数组进行排序,然后重新排序,使Pinned 注释在这个列表的顶部。
我已经试过整理笔记了。
const SortedNotes = Notes.sort((a, b) => a.Modified > b.Modified);
Notes 是带有类的数组。
但是,有没有更好的方法来重新排列这个数组?或者这是我唯一可以使用的方法?
SortedNotes.filter(n => n.Pinned).concat(SortedNotes.filter(n => !n.Pinned));
以上方法可行,我知道我可以使用Array.prototype.partition,那么还有其他方法吗?
谢谢
【问题讨论】:
-
请注意:sort 就地排序并修改现有数组。
-
为什么不对将固定键发送到顶部的笔记再次排序?
-
如果 Modified 实际上是 Date 类型,而 Pinned 是布尔值,这应该可以工作 ->
sort((a, b) => Number(b.Pinned) - Number(a.Pinned) || a.getTime() - b.getTime())在排序术语中它被称为复合索引排序。 -
(a, b) => a.Modified > b.Modified是一个天生不稳定的排序返回值。 -
@Keith 这是一个有趣的声明,
Number(b.Pinned)。我会试试这一切是如何工作的,谢谢你的回答!
标签: javascript arrays node.js sorting