【问题标题】:Sort by Status then by date JavaScript按状态排序,然后按日期 JavaScript
【发布时间】:2021-09-30 09:28:25
【问题描述】:

我有一个要排序的以下类型的数组。我想按状态对它们进行排序并首先显示错误的,然后按日期对它们进行排序。我不知道我是否应该使用 group by then sort。

    "itemlist": [{
"Status":false,"Date":"2021-07-23T07:43:01.377Z","Title":"test4"},{
"Status":false,"Date":"2021-07-23T07:28:23.841Z","Title":"test3"},{
"Status":false,"Date":"2021-07-23T07:03:12.736Z","Title":"test2"},{
"Status":false,"Date":"2021-07-23T07:02:01.901Z","Title":"test1"},{
"Status":false,"Date":"2021-07-23T06:46:34.614Z","Title":"test1"},{
"Status":false,"Date":"2021-07-22T14:33:41.351Z","Title":"test0"},{
"Status":true,"Date":"2021-07-16T06:28:41.568Z","Title":"Test"}]

我使用了下面的代码,它按状态对数组进行排序,但日期排序不起作用。有人可以用更好的方法帮助我吗?我做错了什么? ,谢谢

var res=itemlist.sort((a, b) => (a.Status === b.Status ) ? 0 : a.Status ? 1 : -1 || b.Date- a.Date);
  

【问题讨论】:

  • 因为你的日期是字符串格式

标签: javascript arrays angular sorting arraylist


【解决方案1】:

原因是你的日期是字符串格式,实际上不是日期,比较时需要改成日期

var res=itemlist.sort(
   (a, b) => (a.Status === b.Status ) ? 
      0 : a.Status ? 1 : -1 || new Date(b.Date)- new Date(a.Date));

另外,你的表达式太复杂,无法阅读和调试,最好用()包裹它或者用if else条件代替

 var res=itemlist.sort(
   (a, b) => (a.Status === b.Status ) ? 
      0 : (a.Status ? 1 : -1 || new Date(b.Date)- new Date(a.Date)));

工作代码

   var itemlist = [{
"Status":false,"Date":"2021-07-23T07:43:01.377Z","Title":"test4"},{
"Status":false,"Date":"2021-07-23T07:28:23.841Z","Title":"test3"},{
"Status":false,"Date":"2021-07-23T07:03:12.736Z","Title":"test2"},{
"Status":false,"Date":"2021-07-23T07:02:01.901Z","Title":"test1"},{
"Status":false,"Date":"2021-07-23T06:46:34.614Z","Title":"test1"},{
"Status":false,"Date":"2021-07-22T14:33:41.351Z","Title":"test0"},{
"Status":true,"Date":"2021-07-16T06:28:41.568Z","Title":"Test"}];
 var res=itemlist.sort(
   (a, b) => (a.Status === b.Status ) ? 
      0 : (a.Status ? 1 : -1 || new Date(b.Date)- new Date(a.Date)));

//output the sorted result
console.log(res);

【讨论】:

  • 收到此错误“算术运算的左侧必须是 'any'、'number'、'bigint' 或枚举类型”
  • @aneeshaneeshs 我在我身边测试过,它工作正常,你需要检查你自己的代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 2021-09-30
  • 2021-09-18
相关资源
最近更新 更多