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)
可能是的副本。