我想对一组对象进行排序,如下所示:
[
{
"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.农业企业
如果模型类型是 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)
要采用这种方法,您需要跳过 order
对象中的虚假 (0
) 值。
关于javascript - 为什么这种方式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55235874/