【问题标题】:Sort desc on date and if tie then on risk in javascript array按日期对 desc 进行排序,如果并列则按 javascript 数组中的风险排序
【发布时间】:2021-01-14 01:48:37
【问题描述】:

我有一组对象,我想先按日期排序,即 desc 中的“create_date_format”,如果 tie 然后按字母顺序排序风险,即 asc

我试过 lodash.orderBy(risk_list, ['create_date_format', 'risk'], ['desc']) 但由于日期是字符串格式,它按日期字符串中的数字排序,因此例如 2020 年 1 月 28 日出现在 01 之前2020 年 8 月,因为 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 中的“风险”上排序

【问题讨论】:

标签: javascript node.js arrays reactjs sorting


【解决方案1】:
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) 
)

【讨论】:

    【解决方案2】:

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

    为要比较的两个对象创建日期实例后,您可以检查两个日期项是否相等。如果是,则跳过此排序逻辑并根据risk 执行排序。看sn-p

    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)

    【讨论】:

      猜你喜欢
      • 2019-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      相关资源
      最近更新 更多