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

Представлен такой объект:

let obj = {
  0: { min: '2', max: '5' },    // 3
  1: { min: '12', max: '34' },  // 22
  2: { min: '1', max: '2' },    // 1
  3: { min: '6', max: '123' },  // 117
  4: { min: '-20', max: '-4' }, // -16
};

console.log(obj);

Нужно получить результат после сортировки:

let obj = {
  4: { min: '-20', max: '-4' }, // -16
  2: { min: '1', max: '2' },    // 1
  0: { min: '2', max: '5' },    // 3
  1: { min: '12', max: '34' },  // 22
  3: { min: '6', max: '123' },  // 117
};

Ответы (2 шт):

Автор решения: Konstantin Modin

Для сортировки это должен быть массив. А массив можно отсортировать например так:

let arr = [
  { min: "2", max: "5" }, // 3
  { min: "12", max: "34" }, // 22
  { min: "1", max: "2" }, // 1
  { min: "6", max: "123" }, // 117
  { min: "-20", max: "-4" }, // -16
];
console.log(`arr`, arr);

const sorted = arr
  .map((item) => ({ ...item }))
  .sort((a, b) => a.max - a.min - (b.max - b.min));
console.log(`sorted`, sorted);

→ Ссылка
Автор решения: Sergey Glazirin

Как правильно выразился Konstantin Modin, сортировать нужно массив, так как это структура больше подходит для сортировки, чем объект. Думаю, стоит обратить внимание на алгоритмы и структуры данных. Если вам нужно потом пройти циклом, то тут тоже получается, что массив подходит лучше, чем объект. Но сделал алгоритм под ваши требования.

P.S. Добавил вариант с использованием только методов массива, для меньшего объема конструкций.

P.P.S. Во всех примерах получается, что из большего вычитается меньшее. -4 - (-20) = 16.

let obj = {
  0: {
    min: '2',
    max: '5'
  }, // 3
  1: {
    min: '12',
    max: '34'
  }, // 22
  2: {
    min: '1',
    max: '2'
  }, // 1
  3: {
    min: '6',
    max: '123'
  }, // 117
  4: {
    min: '-20',
    max: '-4'
  }, // 16
};



function getSortedObject(obj) {
  const arr = Object.entries(obj).map(([key, value]) => value); // получаем массив из значений полей объекта
  const sorted = arr.sort((a, b) => (a.max - a.min) - (b.max - b.min)); // сортируем массив значений
  const result = {}; // создаем пустой объект, в который запишем новые значения.

  for (let i = 0; i < sorted.length; i++) {
    result[i.toString()] = sorted[i]; // в цикле заполняем значения объекта result
  }

  return result; // возвращаем итоговый объект
}

console.log(getSortedObject(obj));


function getSortedObject2(obj) {
  const result = {};

  const arr = Object.entries(obj)
    .map(([key, value]) => value)
    .sort((a, b) => (a.max - a.min) - (b.max - b.min))
    .forEach((element, index) => {
      result[index.toString()] = element;
    })

  return result;
}

console.log(getSortedObject2(obj));

→ Ссылка