projects
我想要实现的目标:
我想对具有多个对象的数组linkedProjects
进行排序。
首先,它应先按ID对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;
})
排序其余对象。
到目前为止我所做的:
linkedProjects
由lastUpdate进行排序是可行的,并且以前已经实现,但是我对[
{
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
}
]
的新实现不起作用。
结果应为:
<add name="AttitudeUnitDBEntities"
connectionString=" metadata=res://*/Database.AttidudeDB.csdl|res://*/Database.AttidudeDB.ssdl|res://*/Database.AttidudeDB.msl;
provider=System.Data.SqlClient;
provider connection string="
data source=www.net.com;
initial catalog=DB_A;
persist security info=True;user id=admin;
password=********;MultipleActiveResultSets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
答案 0 :(得分:3)
您可以采用一个函数,该函数返回项目的顺序或返回大量项目,并按此增量排序或按上次更新的增量进行排序。
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; }
答案 1 :(得分:1)
这将首先放置链接,然后按lastUpdate
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}];
const sorted = projects.sort(function(a,b){
if(linkedProjects.indexOf(''+a.id) !== -1) return -1;
if(linkedProjects.indexOf(''+b.id) !== -1) return 1;
return b.lastUpdate - a.lastUpdate
});
console.log(sorted);