Сортировка массива после фильтрации 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;
});