2 回答

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

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)
添加回答
举报