为了账号安全,请及时绑定邮箱和手机立即绑定

按日期对 desc 进行排序,如果并列则按 javascript 数组中的风险排序

按日期对 desc 进行排序,如果并列则按 javascript 数组中的风险排序

喵喵时光机 2023-04-01 15:08:11
我有一组对象,我想首先按日期排序,即 desc 中的“create_date_format”,如果领带则按风险字母顺序排序,即 asc我尝试了 lodash.orderBy(risk_list, ['create_date_format', 'risk'], ['desc']) 但由于日期是字符串格式,它按日期字符串中的数字排序,因此例如 2020 年 1 月 28 日出现在 2020 年 8 月 1 日之前28 高于 01。let arr = [{  avoided: 0,  avoided_note: null,  create_date_format: "28 Sep 2020",  id: 209,  notes: "Nothing is happening",  risk: "very high risk",  severity: 3,  severity_name: "High",  type: 1,  type_name: "Internal"}, {  avoided: 0,  avoided_note: null,  create_date_format: "23 Sep 2020",  id: 206,  notes: null,  risk: "Risk 12",  severity: 3,  severity_name: "High",  type: 2,  type_name: "External"}, {  avoided: 0,  avoided_note: null,  create_date_format: "22 Sep 2020",  id: 202,  notes: "test note",  risk: "test risk",  severity: 3,  severity_name: "High",  type: 2,  type_name: "External"}, {   avoided: 0,  avoided_note: null,  create_date_format: "23 Sep 2020",  id: 206,  notes: null,  risk: "abc Risk 12",  severity: 3,  severity_name: "High",  type: 2,  type_name: "External"}]我想先按日期排序,即 desc 中的“create_date_format”,如果是,则在 asc 中按字母顺序排列“风险”
查看完整描述

2 回答

?
DIEA

TA贡献1820条经验 获得超2个赞

let sorted = arr.sort((a, b) =>

  // sort by create_date_format desc

  (new Date(b.create_date_format) - new Date(a.create_date_format)) 

  // if 0 (tie), sort by risk asc

  || a.risk.localeCompare(b.risk) 

)


查看完整回答
反对 回复 2023-04-01
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

您可以做的是编写一个排序函数,该函数具有用于比较属性的简单检查。为了首先按日期排序,您需要将字符串日期转换为实例Date,以便按时间而不是按字符对值进行排序。


为要比较的两个对象创建日期实例后,您可以检查两个日期项是否相等。如果是,则跳过此排序逻辑并执行基于 的排序risk。查看代码片段


let arr = [{avoided: 0,

avoided_note: null,

create_date_format: "28 Sep 2020",

id: 209,

notes: "Nothing is happening",

risk: "very high risk",

severity: 3,

severity_name: "High",

type: 1,

type_name: "Internal"}, 

{ avoided: 0,

avoided_note: null,

create_date_format: "23 Sep 2020",

id: 206,

notes: null,

risk: "Risk 12",

severity: 3,

severity_name: "High",

type: 2,

type_name: "External"}, {avoided: 0,

avoided_note: null,

create_date_format: "22 Sep 2020",

id: 202,

notes: "test note",

risk: "test risk",

severity: 3,

severity_name: "High",

type: 2,

type_name: "External"}, 

{ avoided: 0,

avoided_note: null,

create_date_format: "23 Sep 2020",

id: 206,

notes: null,

risk: "abc Risk 12",

severity: 3,

severity_name: "High",

type: 2,

type_name: "External"}]


var sortedArr = arr.sort((a, b)=>{

  var aDate = new Date(a.create_date_format)

  var bDate = new Date(b.create_date_format)


  if (aDate.getTime() === bDate.getTime()){

    //for strings return 1 or -1 depending on condition

    return b.risk > a.risk ? 1 : -1

  } else {

    return aDate - bDate

  }

})


console.log(sortedArr)


查看完整回答
反对 回复 2023-04-01
  • 2 回答
  • 0 关注
  • 112 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信