Почему это не так? - PullRequest
       2

Почему это не так?

3 голосов
/ 19 марта 2019

Я хочу отсортировать массив объектов и выглядит так:

  [
        {
            "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. Агробизнес

Если тип модели является Коммерческим, применяются следующие правила: 1. Тип: Фактический и порядок качества: Неквалифицированный, Квалифицированный, Неаудированный.2. Тип: прогнозируемый и порядок качества: прогнозируемый, проверенный.

Если типом модели является Агробизнес, применяются следующие правила: 1. Тип: исторический и порядок качества: неквалифицированный, квалифицированный, неаудированный.2. Тип: фактический и порядок качества: проекция, проверено.

Как я и сказал, нет прямой сортировки, но может ли кто-нибудь помочь мне встать на правильный путь / как мне начать решать это?

Ответы [ 2 ]

5 голосов
/ 19 марта 2019

Теоретически, вы можете использовать объект для сортировки и взять 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 объект.

0 голосов
/ 19 марта 2019

Array.sort принимает функцию сравнения.Вы можете добавить свою логику сортировки в функцию сравнения.

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
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...