我想对对象数组进行排序,如下所示:
[
{
"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.Type:质量的历史和顺序:不合格,合格,未经审核。 2.类型:实际和质量顺序:预计,经过审核。
就像我说的那样,没有直率的排序,但是谁能帮助我走上正确的道路/我将如何开始解决这个问题?
答案 0 :(得分:5)
从理论上讲,您可以使用一个对象进行排序,并使用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
对象中的虚假(order
)值。
答案 1 :(得分:0)
Array.sort接受比较功能。您可以在compare函数中添加排序逻辑。
const data = []; // Put data here
const sortedData = data.sort((data1,data2)=>{
// This function should return 1 if data1 > data2,
// -1 if data2 > data1
// And 0 if data1 === data2
if(data1.model==="Commercial"){
// Code for commercial
}else{
// Code for others
}
})