首先通过在其他数组中包含ID来对数组进行排序,然后按日期进行排序

时间:2020-03-10 16:15:00

标签: javascript arrays sorting object

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=&quot;
   data source=www.net.com;
   initial catalog=DB_A;
   persist security info=True;user id=admin;
   password=********;MultipleActiveResultSets=True;App=EntityFramework&quot;" 
   providerName="System.Data.EntityClient" />

2 个答案:

答案 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);

相关问题