我有一个对象数组,每个对象都具有以下属性:
- id(数字)
- isBlue(可选 true 或 false)
- isRed(可选 true 或 false)
- 排名(可选数字 - 1 比 2 更优先 -)
- createdAt(日期,字符串格式“2012-02-01”)
我希望能够对这些数组中的对象进行排序,以便它们首先出现蓝色的对象,然后出现红色的对象,最后出现非蓝色或红色的对象。然后,在按颜色的每个“类别”中,我想按排名排序,然后按升序创建(最旧的首先出现)。
所以,我首先想要蓝色,其次是红色,最后是其他颜色。但对于每种颜色,我想通过耙子订购并创建。
输入示例:
[
{ id: 5, isBlue: false, isRed: true, ranking: 3, createdAt:
'2010-01-20' },
{ id: 3, isBlue: false, isRed: true, ranking: 3,
createdAt: '2010-01-23' },
{ id: 2, isBlue: false, isRed: true,
ranking: 2, createdAt: '2012-01-23' },
{ id: 16, isBlue: false, isRed:
false, ranking: 1, createdAt: '2014-01-23' },
{ id: 1, isBlue: true,
isRed: false, ranking: null, createdAt: '2014-01-23' },
{ id: 10,isBlue: true, isRed: false, ranking: 3, createdAt: '2012-01-23'}
]
预期输出为:
[
{ id: 10,isBlue: true, isRed: false, ranking: 3, createdAt: '2012-01-23'},
{ id: 1, isBlue: true,
isRed: false, ranking: null, createdAt: '2014-01-23' },
{ id: 2, isBlue: false, isRed: true,
ranking: 2, createdAt: '2012-01-23' },
{ id: 5, isBlue: false, isRed: true, ranking: 3, createdAt:
'2010-01-20' },
{ id: 3, isBlue: false, isRed: true, ranking: 3,
createdAt: '2010-01-23' },
{ id: 16, isBlue: false, isRed:
false, ranking: 1, createdAt: '2014-01-23' },
]
我不知道如何“先按颜色”执行此订单,然后在每个颜色组中进行倾斜和创建。
最佳答案
您从最不相关到最相关进行链式排序,例如:
var arr = [{ id: 5, isBlue: false, isRed: true, ranking: 3, createdAt:'2010-01-20' },
{ id: 3, isBlue: false, isRed: true, ranking: 3, createdAt: '2010-01-23' },
{ id: 2, isBlue: false, isRed: true, ranking: 2, createdAt: '2012-01-23' },
{ id: 16, isBlue: false, isRed:false, ranking: 1, createdAt: '2014-01-23' },
{ id: 1, isBlue: true, isRed: false, ranking: null, createdAt: '2014-01-23' },
{ id: 10,isBlue: true, isRed: false, ranking: 3, createdAt: '2012-01-23'} ];
arr.sort((a,b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime())
.sort((a,b) => (b.ranking || 0) - (a.ranking || 0))
.sort((a,b) => (a.isRed === b.isRed) ? 0 : a.isRed ? -1 : 1)
.sort((a,b) => (a.isBlue === b.isBlue) ? 0 : a.isBlue ? -1 : 1);
console.log(arr)
关于javascript - 在 Javascript 中按属性排序,然后按其他两个属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52257242/