javascript - 为什么这种方式不起作用

标签 javascript reactjs sorting

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

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

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

最佳答案

理论上,您可以使用对象进行排序,并使用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)

要采用这种方法,您需要跳过 order 对象中的虚假 (0) 值。

关于javascript - 为什么这种方式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55235874/

相关文章:

javascript - 从 Javascript 对象循环动态创建的表单。如何将数据保存回对象

javascript - 从循环中动态填充可折叠 DIV 列表

Python 插入排序算法

php - 对字母和数字字符串类型元素的数组进行 ASC 排序,但数字元素位于字母元素之后

c - C中的通用链表排序函数

javascript - 将 Knockout.js 模型应用于多个元素

javascript - AWS 放大自定义 header : Property Assignment Expected

javascript - 提取 Redux Store/State 作为选择器

node.js - 使用 FS 文件系统的 Node、Webpack 和 React 路由

javascript - AWS SDK 文件通过 Node/Express 使用流 PassThrough 上传到 S3 - 文件总是损坏