const linkedProjects = ["2", "3"];
const projects = [
{
id: 1,
name: "Project 1",
lastUpdate: 1575976301091
},
{
id: 2,
name: "Project 2",
lastUpdate: 1575975812091
},
{
id: 3,
name: "Project 3",
lastUpdate: 1575976378391
},
{
id: 4,
name: "Project 4",
lastUpdate: 15753276301091
}
];
我想要实现的目标:
我想对包含多个对象的数组项目
进行排序。
首先,它应该首先按 ID 对包含在 linkedProjects
中的对象进行排序。
其次,它应该按 lastUpdate
对剩余对象进行排序。
到目前为止我做了什么:
projects.sort((a, b) => {
const [dateA, dateB] = [
a.lastUpdate && a.lastUpdate.getTime(),
b.lastUpdate && b.lastUpdate.getTime()
];
if (linkedProjects && linkedProjects.length > 0) {
if (linkedProjects.includes(a.id)) {
return -1;
} else {
return 1;
}
}
if (dateA === dateB) {
console.log("0a")
return 0;
}
if (!dateA) {
console.log("1b")
return 1;
}
if (!dateB) {
console.log("-1b")
return -1;
}
if (dateA > dateB) {
console.log("-1d")
return -1;
}
if (dateA < dateB) {
console.log("1")
return 1;
}
return 0;
})
按lastUpdate排序可以工作并且之前已实现,但我使用linkedProjects
的新实现不起作用。
结果应该是:
[
{
id: 2, // included in linkedProjects
name: "Project 2",
lastUpdate: 1575975812091
},
{
id: 3, // included in linkedProjects
name: "Project 3",
lastUpdate: 1575976378391
},
{
id: 4,
name: "Project 4",
lastUpdate: 15753276301091 // is newer than Project 1
},
{
id: 1,
name: "Project 1",
lastUpdate: 1575976301091 // is older than Project 4
}
]
最佳答案
您可以采用一个返回项目顺序或一个大数字的函数,并按此增量或上次更新的增量进行排序。
const
linkedProjects = [2, 3],
getOrder = ({ id }) => (linkedProjects.indexOf(id) + 1) || Number.MAX_VALUE,
projects = [{ id: 1, name: "Project 1", lastUpdate: 1575976301091 }, { id: 2, name: "Project 2", lastUpdate: 1575975812091 }, { id: 3, name: "Project 3", lastUpdate: 1575976378391 }, { id: 4, name: "Project 4", lastUpdate: 15753276301091 }];
projects.sort((a, b) => getOrder(a) - getOrder(b) || b.lastUpdate - a.lastUpdate);
console.log(projects);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 首先通过在其他数组中包含 ID 对数组进行排序,然后按日期排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60621691/