Сортировка массива после фильтрации JS

Для фильтрации списка товаров по категориям использую сравнение с id текущей страницы VueRouter-а:

let vm = this;
this.PRODUCTS.map(function (item) {
  item.categories.map(function (cat){
    if (cat.category_id == vm.id){
      vm.sortedProducts.push(item);
    }
  })
})

Сам JSON такого рода:

[
  {
    "id" : "1",
    "name" : "phone1",
    "price" : "14000",
    "categories" : [
      {
        "category_id" : "3",
        "sort_order" : "8"
      },
      {
        "category_id" : "56",
        "sort_order" : "2"
      },
      {...}
    ]
  },
  {
    "id" : "2",
    "name" : "phone12",
    "price" : "16000",
    "categories" : [...]
  }
]

Как получить отфильтрованный массив sortedProducts отсортированный по sort_order?


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

Автор решения: Yugofx

Совсем не видно, куда вы это мапите. Но давайте пока выполним просто ваш запрос абстрактно:

let vm = this;
const sortedProducts = this.PRODUCTS
    .filter(p => p.categories.some(c => c.category_id === vm.id))
    .sort((p1, p2) => {
        const s1 = p1.categories.find(c => c.category_id === vm.id).sort_order;
        const s2 = p2.categories.find(c => c.category_id === vm.id).sort_order;
        return s1 - s2;
    });
→ Ссылка