Javascript:按日期字符串属性对对象列表进行排序,其中日期可以不定义
我得到了一个对象列表,其中一些作为日期属性Javascript:按日期字符串属性对对象列表进行排序,其中日期可以不定义,javascript,sorting,date,Javascript,Sorting,Date,我得到了一个对象列表,其中一些作为日期属性completedAt,但有些没有。我希望列表中最新完成的对象排在第一位,没有我希望的completedAt属性的对象排在最后,我不关心它们的顺序,只要它们在所有日期对象之后 const list=[ { id:'40', 完成时间:2019-08-06T09:50:39.219Z }, { id:'45' }, { id:'73', 完成时间:2018-08-06T09:51:19.362Z }, { id:'74', 完成时间:2019-08-06
completedAt
,但有些没有。我希望列表中最新完成的对象排在第一位,没有我希望的completedAt
属性的对象排在最后,我不关心它们的顺序,只要它们在所有日期对象之后
const list=[
{
id:'40',
完成时间:2019-08-06T09:50:39.219Z
},
{
id:'45'
},
{
id:'73',
完成时间:2018-08-06T09:51:19.362Z
},
{
id:'74',
完成时间:2019-08-06T09:51:00.279Z
},
{
id:'96',
完成时间:2019-08-06T09:51:12.761Z
}
];
const sortedList=list.sort((a,b)=>{返回新日期(b.completedAt)-新日期(a.completedAt)});
console.log(sortedList)
您可以检查真实性并按字符串对日期进行排序,因为您已经有了日期字符串
顺便说一句,就地(就地)排序
const list=[{id:'40',completedAt:'2019-08-06T09:50:39.219Z'},{id:'45'},{id:'73',completedAt:'2018-08-06T09:51:19.362Z'},{id:'74',completedAt:'2019-08-06T09:51:00.279Z'},{id:'96',completedAt:'2019-08-06T09:51:12.761Z'};
列表.排序((a,b)=>
!a.completedAt-!b.completedAt||
b、 completedAt.localeCompare(a.completedAt)
);
控制台日志(列表)代码>
.as控制台包装{max height:100%!important;top:0;}
这需要一些技巧-
const list = [
{
id: '40',
completedAt: '2019-08-06T09:50:39.219Z'
},
{
id: '45'
},
{
id: '73',
completedAt: '2018-08-06T09:51:19.362Z'
},
{
id: '74',
completedAt: '2019-08-06T09:51:00.279Z'
},
{
id: '96',
completedAt: '2019-08-06T09:51:12.761Z'
}
];
const sortedList = list.filter((data) => data.hasOwnProperty('completedAt')).sort((function (a, b) {
return new Date(a.completedAt) - new Date(b.completedAt)
})).concat(list.filter((data) => !data.hasOwnProperty('completedAt')));
console.log(sortedList)
我是这样做的
const list=[{
id:'40',
完成时间:2019-08-06T09:50:39.219Z
},
{
id:'45'
},
{
id:'73',
完成时间:2018-08-06T09:51:19.362Z
},
{
id:'74',
完成时间:2019-08-06T09:51:00.279Z
},
{
id:'96',
完成时间:2019-08-06T09:51:12.761Z
}
];
const sortedList=list.sort((a,b)=>{
如果(a.completedAt==未定义){
返回1;
}
如果(b.completedAt==未定义){
返回-1;
}
const a1=新日期(a.completedAt).getTime();
const b1=新日期(b.completedAt).getTime();
返回b1-a1;
});
console.log(sortedList)
可能是的副本。