Упорядочить вложенные объекты по параметру JS - PullRequest
0 голосов
/ 26 ноября 2018

Есть ли способ сортировки вложенных объектов по одному из их параметров?

Например, если у меня есть такая структура данных:

var someObject = {
  'part1328': {
    'time': 1543203609575,
  },
  'part38321': {
    'time': 1543203738716,
  },
  'part1328': {
    'time': 1543203746046,
  },
  'part38338': {
    'time': 1543203752264,
  }

};

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

Ответы [ 3 ]

0 голосов
/ 26 ноября 2018

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

Object.keys(someObject).sort((a, b) => a.time - b.time)
// => ["part1328", "part38321", "part38338"]

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

Обратите также внимание, что объекты не могут иметь повторяющиеся ключи;они просто перезаписывают друг друга.Таким образом, четвертое значение пропало еще до того, как вы присвоили его someObject.

0 голосов
/ 26 ноября 2018

Вы можете сохранить отсортированный список, создав array, отсортированный по time

Код:

const someObject = {
  'part1328': {
    'time': 1543203609575,
  },
  'part38321': {
    'time': 1543203738716,
  },
  'part1328': {
    'time': 1543203746046,
  },
  'part38338': {
    'time': 1543203752264,
  }
};

const result = Object.keys(someObject)
  .sort((a, b) => someObject[a].time - someObject[b].time)
  .map(k => ({ [k]: someObject[k] }));

console.log(result);
0 голосов
/ 26 ноября 2018

Вы можете использовать Object.entries, чтобы получить набор пар ключ / значение в виде списка.Затем вы можете отсортировать этот список и упорядочить данные так, как вам нравится:

var someObject = {
  'part1328': {
    'time': 1543203609575,
  },
  'part38321': {
    'time': 1543203738716,
  },
  'part1328': {
    'time': 1543203746046,
  },
  'part38338': {
    'time': 1543203752264,
  }

};

let arr = Object.entries(someObject).sort((a, b) => a.time - b.time)
console.log(arr)


// from here you can manage the data any way you want. 
// for example, an array of simple objects:

let merged = arr.map(([key, value]) => ({id: key, ...value}) )
console.log(merged)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...