【发布时间】:2019-12-22 17:18:19
【问题描述】:
我正在尝试对具有可为空的布尔值和标题的对象数组进行排序。如果列表中的某个项目已设置为重要,则"ReadUnderstood" 为true 或false,如果不是,则为null。如果"ReadUnderstood" 是true 或null,我希望列表按字母顺序排列,但如果值为false,我希望它位于列表顶部。
下面的代码最接近我想要的。这将按字母顺序返回列表,其中"ReadUnderstood" 为false 的项目位于列表顶部。但是"ReadUnderstood" 是true 的项目最终出现在列表的末尾,而不是按字母顺序排列。任何帮助将不胜感激。
items = [
{Title: 'A', ReadUnderstood: null},
{Title: 'C', ReadUnderstood: false},
{Title: 'E', ReadUnderstood: null},
{Title: 'B', ReadUnderstood: true},
{Title: 'D', ReadUnderstood: true},
{Title: 'F', ReadUnderstood: null},
]
items.sort((a, b) => {
return (b.ReadUnderstood != null && b.ReadUnderstood == false) - (a.ReadUnderstood != null && a.ReadUnderstood == false) || a.Title - b.Title;
})
Desired result:
items = [
{Title: 'C', ReadUnderstood: false},
{Title: 'A', ReadUnderstood: null},
{Title: 'B', ReadUnderstood: true},
{Title: 'D', ReadUnderstood: true},
{Title: 'E', ReadUnderstood: null},
{Title: 'F', ReadUnderstood: null},
]
【问题讨论】:
-
请添加输入样本和预期输出以创建minimal reproducible example
-
多个
false值怎么样。它们也需要按字母顺序排序吗? -
那也更好,是的:)
标签: javascript arrays sorting object