Как отсортировать список, используя свойства объекта в качестве объекта списка и значение в порядке? - PullRequest
0 голосов
/ 20 апреля 2020

Я задавал такой же вопрос здесь Как отсортировать ArrayList, используя ключ Map в качестве объекта списка и значение в качестве порядка?

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

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

objectList = [object1 , object2, object3, object4]

и я сохраняю порядок каждого объекта, принадлежащего этому экземпляру, в другом примере объекта:

order

{
   "object1":4,
   "object2":2,
   "object3":1,
   "object4":3
}

Поэтому я хочу отсортировать мой список по его значению в свойстве объекта заказа, полученного идентификатором объекта в качестве ключа:

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

[object3, object2, object4, object1]

В Java это работает

objectList.sort(Comparator.comparing(o -> yourMap.get(o.getId()));

Однако я не уверен, как добиться такой же сортировки в JavaScript

РЕДАКТИРОВАТЬ Просто чтобы уточнить, я не хочу сортировать заказ объект. Я хочу отсортировать свой objectList, используя его порядок, поддерживаемый в объекте order

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

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

this.objectList.sort(function(a, b)
    {
      if(order[a._id] > order[b._id]) return 1;
      if(order[b._id] > order[a._id]) return -1;

      return 0;
    });
0 голосов
/ 20 апреля 2020

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

const data = {
  "object1": 4,
  "object2": 2,
  "object3": 1,
  "object4": 3
};
const sortedVal = Object.values(data).sort((a, b) => a - b);
console.log(sortedVal)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...