我想对对象数组进行排序,如下所示:
[
{
"id": 1,
"businessEntityId": "BE001",
"financials": {
"Npbt": 2323,
"Interest": 123213,
"Depreciation": 213123,
"Ebit": 1312321,
"EbitDa": 123123,
"Leasing": 123213
},
"type": "Actual",
"startDate": "2018-06-15T00:00:00.000Z",
"endDate": "2018-06-15T00:00:00.000Z",
"model": "Commercial",
"duration": 12,
"quality": "Unqualified"
},
{
"id": 2,
"businessEntityId": "BE002",
"financials": {
"Npbt": 2323,
"Interest": 123213,
"Depreciation": 213123,
"Ebit": 1312321,
"EbitDa": 123123,
"Leasing": 123213
},
"type": "Actual",
"startDate": "2017-06-15T00:00:00.000Z",
"endDate": "2017-06-15T00:00:00.000Z",
"model": "Agribusiness",
"duration": 12,
"quality": "Audited"
},
]
我知道如何进行基本排序,例如按日期排序,但要求却比较严格。这些是desc中的排序规则。优先顺序:
型号类型:
1,商业
2,农业综合企业
如果modeltype为Commercial,则规则为:
1.类型:质量的实际和顺序:不合格,合格,未经审核。
2.类型:预计和质量顺序:预计,已审核。
如果模型类型为Aggribusiness,则规则为:
1.类型:质量的历史和顺序:不合格,合格,未经审核。
2.类型:实际和质量顺序:预测,已审核。
就像我说的那样,没有任何直截了当的排序,但是任何人都可以帮助我走上正确的道路/我将如何解决这个问题?
最佳答案
从理论上讲,您可以使用一个对象进行排序,并使用type
和quality
进行排序。
var order = {
model: { Commercial: 1, Agribusiness: 2 },
Historical: { Projection: 1, Audited: 2 },
Actual: { Unqualified: 1, Qualified: 2, Unaudite: 3 },
BOTTOM: Infinity
};
array.sort((a, b) =>
order.model[a.model] - order.model[b.model] ||
order[a.type][a.quality] - order[b.type][b.quality]
);
对于未知值,您可以添加默认值(取决于位置,例如顶部的
-Infinity
或底部的Infinity
)并使用此模式,例如(order.model[a.model] || order.BOTTOM) - (order.model[b.model] || order.BOTTOM)
为了采用这种方法,您需要跳过
0
对象中的falsy(order
)值。