我想对对象数组进行排序,如下所示:

  [
        {
            "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.类型:实际和质量顺序:预测,已审核。

就像我说的那样,没有任何直截了当的排序,但是任何人都可以帮助我走上正确的道路/我将如何解决这个问题?

最佳答案

从理论上讲,您可以使用一个对象进行排序,并使用typequality进行排序。

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

09-26 16:42