Как отсортировать массив объектов по двум свойствам и проверить, является ли ярость последовательной?

У меня есть массив объектов, значения которых имеют диапазоны, в которых я хочу отсортировать значения на основе диапазонов. Сначала он должен отсортировать на основе conditionalTo, а затем в диапазоне от условного от до условного, чтобы отсортировать вычисления до. Множество

[
{conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000},
{conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000},
{conditionalFrom: 10001, conditionalTo: 999999999999, computationFrom: 0, computationTo: 1000}
]

ожидаемый результат

[
{conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000},
{conditionalFrom: 10001, conditionalTo: 999999999999, computationFrom: 0, computationTo: 1000},
{conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000},
]

множество

[
{conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000},
{conditionalFrom: 0, conditionalTo: 10000, computationFrom: 1001, computationTo: 100000},
{conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000},
{conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 0, computationTo: 1000},
]

ожидаемый результат

[
{conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000},
{conditionalFrom: 0, conditionalTo: 10000, computationFrom: 1001, computationTo: 100000},
{conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 0, computationTo: 1000},
{conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000}
]

с использованием lodash, но вывод неверен в обоих сценариях

 const SlabDetails = orderBy(this.tableData, [r => r.conditionalTo - r.conditionalFrom, r => r.computationTo - r.computationFrom], "asc");
Источник
Codelisting
за 2 против

Вы можете указать связанные свойства, используя_.sortBy .

const
    sort = data => _.sortBy(data, [
        'conditionalFrom',
        'computationFrom',
        'computationTo'
    ]),
    data0 = [{ conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000 }, { conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000 }, { conditionalFrom: 10001, conditionalTo: 999999999999, computationFrom: 0, computationTo: 1000 }],
    data1 = [{ conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000 }, { conditionalFrom: 0, conditionalTo: 10000, computationFrom: 1001, computationTo: 100000 }, { conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 0, computationTo: 1000 }, { conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000 }];

console.log(sort(data0));
console.log(sort(data1));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

  • 0
    это решение не работает для 1-го массива. Можете ли вы, пожалуйста, проверить
  • 0
    не могли бы вы сказать мне, что я делаю не так? stackblitz.com/edit/angular-ivy-vlk5m4
Codelisting
Популярные категории
На заметку программисту