JavaScript, как получить порядок объекта после сортировки по его свойству - PullRequest
0 голосов
/ 21 февраля 2019
let o = {
    a: {value: 3},
    b: {value: 1}, 
    c: {value: 4}, 
    d: {value: 2}
};

мы знаем c> a> d> b, поэтому выходной вывод должен быть

{
    a: {value: 3, order: 2},
    b: {value: 1, order: 4}, 
    c: {value: 4, order: 1}, 
    d: {value: 2, order: 3}
}

Как этого добиться в js?

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Вы можете отсортировать значения в вашем объекте, а затем перебрать ключи объекта, чтобы проверить, совпадает ли текущее значение с текущим значением в массиве sorted, если это так, вы можете установить текущий объект order свойство индекса + 1 (так как индекс начинается с 0):

См. Пример ниже:

const o = {
    a: {value: 3},
    b: {value: 1}, 
    c: {value: 4}, 
    d: {value: 2}
},

sorted = Object.values(o).sort(({value:a},{value:b}) => b-a);

sorted.forEach(({value}, i) => {
  for(key in o) {
    if(o[key].value == value) o[key].order = i+1
  }
});

console.log(o);

Однако это не лучшее решение с точки зрения сложности времени, и я уверен, что оно может быть улучшено

0 голосов
/ 21 февраля 2019

Сочетание ответов Нины и Ника

let myObject = { a: {value: 3}, b: {value: 1},  c: {value: 4},  d: {value: 2} };


Object
  .values(myObject)
  .sort(({value:  a}, {value: b}) => b-a)
  .forEach((k, i) => k.order = i+1)

console.log(myObject)
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 21 февраля 2019

Вы можете получить ключи, отсортировать их по значениям объекта и назначить порядок для данных ключей.

let o = { a: { value: 3 }, b: { value: 1 }, c: { value: 4 }, d: { value: 2 } };

Object
    .keys(o)
    .sort((a, b) => o[b].value - o[a].value)
    .forEach((k, i) => o[k].order = i + 1);

console.log(o);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...