Сортировать массив на основе атрибута промежуточной модели - PullRequest
0 голосов
/ 29 марта 2020

У меня есть три модели (я использую Vue / Vuex-ORM на внешнем интерфейсе). Category, CategoryItem и Item.

Я могу получить массив категорий, и внутри каждой категории есть массив элементов. Модель промежуточного соединения определяет отношения этих двух моделей, и я могу получить к ним доступ:

// array of categories, each category has array of items
const categories = Category.query().where('pack_id', this.selectedPack.id).with('items').get();

categories.map(category => {
    category.items.forEach(item => {
        console.log('item.pivot: ', item.pivot); // pivot refers to join model
        // how to order items based on item.pivot?
    })
})

В пределах .forEach я могу получить доступ к модели соединения с помощью item.pivot. Однако я собираюсь отсортировать элементы каждой категории на основе item.pivot.position.

Я начал идти по пути, где в первой строке внутри .map я определил новый пустой массив, а затем теоретически вывел бы pu sh в новое значение в зависимости от того, была ли позиция выше или ниже , но я не мог понять, как это сделать.

Спасибо!

1 Ответ

0 голосов
/ 29 марта 2020

Ну, просто моя удача. Через полчаса после публикации этого вопроса я разобрался! Вот что я сделал, если кому-то интересно.

categories() {
    const categories = Category.query().where('pack_id', this.selectedPack.id).with('items').get();

    categories.forEach(category => category.items.sort(this.compare));
    return cats;
}

compare(a, b) {
    let comparison = 0;
    if (a.pivot.position > b.pivot.position) comparison = 1;
    else if (a.pivot.position < b.pivot.position) comparison = -1;
    return comparison;
},
...