亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

按日期對 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 關注
  • 177 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號