我有个奇怪的问题。我有简单的注释界面:
export interface Comment {
time: number;
text: string;
}
时间显示自添加以来经过了多少天。我想用我的排序函数对Comment数组进行排序:
comments.sort((a, b) => {
if (a.time < b.time) return -1;
if (a.time > b.time) return 1;
return 0;
})
问题在于,注释的天数相同。他们似乎没有排序。当我添加新评论时,我希望该评论位于最前面。如何解决?
问题链接:stackblitz
答案 0 :(得分:2)
快速修复
在排序之前,只需将最新的放在最前面即可。
onAddCommentEnter(commentText) {
this.comments = [{text: commentText, date: 0}, ...this.comments].sort((a, b) => {
if (a.date < b.date) return -1;
if (a.date > b.date) return 1;
return 0;
})
}
答案 1 :(得分:1)
如果您唯一的排序参数是创建注释的日期,那么实际上您的订单顺序就无法确定,因为无法确定当天早些时候和晚些时候添加了哪些注释。要按时间顺序排列,可以将“时间:数字”替换为“时间:日期”,从而使毫秒级的注释排序精度。
接口:
export interface Comment {
time: Date;
text: string;
}
添加新评论:
this.comments.push(
{text: commentText, date: new Date()}
)
this.comments = comments.sort((a: Comment, b: Comment) => {
return b.date.getTime() - a.date.getTime();
})
这将按时间顺序显示注释;最新的评论在顶部,最旧的在底部。要反转此顺序,只需在简写功能中切换“ a”和“ b”即可。
添加新评论时,只需调用Date()构造函数即可获取当前时间。 如果只想显示创建注释的日期,则可以使用Date的getDate()方法进行显示(所有方法均在此处记录:https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Date)
OR
如果您对持久性顺序不感兴趣,则可以简单地在数组的开头添加新条目:
this.comments.unshift(
{text: commentText, date: new Date()}
);
还有一些最佳做法:
希望我能帮上忙。