Сортировать JS-объекты (вложенные) - PullRequest
0 голосов
/ 11 октября 2018
let tags = {
    "01": {
       contentID: [10, 20],
       occurrences: 1
    },
    "02": {
       contentID: [10, 20],
       occurrences: 1
    },
    "04": {
       contentID: [10, 20],
       occurrences: 3
    },
    "05": {
       contentID: [10, 20],
       occurrences: 6
    }
};

Как отсортировать это в порядке убывания, взяв в качестве базы вхождения, это глобальная переменная.Поэтому я хочу сохранить его в другом объекте и отсортировать его в порядке убывания.

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Пожалуйста, обратите внимание, что объекты в javascript не имеют никакого смысла в порядке.

Однако вы можете создать и разместить массив для хранения вашего результата.

Чтобы получить его в порядке убывания, вы можете сделать

Object.values(tags).sort((a,b) => b.occurrences - a.occurrences)

0 голосов
/ 11 октября 2018

Другие предложения, чтобы думать об этом как о массиве, вероятно, звучат.Не следует думать, что объекты Javascript упорядочены, даже если существует спецификация упорядочения ключей.Но если вы хотите сохранить результаты в одном и том же формате, вы можете сделать это, и все равно закончить сортировку ключей:

let tags = {"01": {"contentID": [10, 20], "occurrences": 1}, "02": {"contentID": [10, 20], "occurrences": 1}, "04": {"contentID": [10, 20], "occurrences": 3}, "05": {"contentID": [10, 20], "occurrences": 6}}

const sorted = Object.entries(tags).sort(([, {occurrences: a}], [, {occurrences: b}]) => b - a)
  .reduce((a, [k, v]) => Object.assign(a, {[k]: v}), {})

console.log(sorted)

Я не вижу, для чего это действительно хорошо.Единственное место, где вы можете увидеть разницу в поведении, это если вы используете что-то вроде Object.keys, Object.values или Object.entries, снова создавая массивы.

0 голосов
/ 11 октября 2018

Вы не можете сортировать объекты, но вы можете преобразовать их в массив значений:

Object.values(tags).sort((a, b) => b.occurrences - a.occurrences)

Результат будет:

[
  {
    contentID: [10, 20],
    occurrences: 6
  },
  {
    contentID: [10, 20],
    occurrences: 3
  },
  {
    contentID: [10, 20],
    occurrences: 1
  },
  {
    contentID: [10, 20],
    occurrences: 1
  }
]

Однако вы можете отсортировать ключи отдельно, еслиони вам также нужны:

Object.keys(tags).sort((a, b) => tags[b].occurrences - tags[a].occurrences)

И вашим результатом будет массив ['05', '04', '02', '01']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...