猿问

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

我有一组对象,我想首先按日期排序,即 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 中按字母顺序排列“风险”


喵喵时光机
浏览 258回答 2
2回答

DIEA

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) )

慕雪6442864

您可以做的是编写一个排序函数,该函数具有用于比较属性的简单检查。为了首先按日期排序,您需要将字符串日期转换为实例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)
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答