Переопределить индексы сортировки - PullRequest
0 голосов
/ 15 сентября 2018

Из бэкэнда я получаю элементы к объекту с индексами сортировки (случайное число от 1 до 999) и массив списка элементов с идентификаторами элементов, отсортированных по их индексам, например:

{
    items: {
        1: {
            sort: 131,
            name: 'Item 1'
        },
        2: {
            sort: 22,
            name: 'Item 2'
        },
        3: {
            sort: 440,
            name: 'Item 3'
        },
        4: {
            sort: 80,
            name: 'Item 4'
        }
    },
    itemList: [2, 4, 1, 3]
}

Используя пользовательский интерфейс, пользователь может изменить порядок элемента, который отражается в массиве itemList. После нажатия кнопки «Сохранить» в пользовательском интерфейсе мне нужно правильно переназначить существующие индексы сортировки и отправить в бэкэнд только элементы, индекс которых был изменен. Так, например, если пользователь установил item 2 для второй позиции itemsList будет [4, 2, 1, 3], а данные, отправленные на сервер, должны быть:

{
    2: {
        sort: 80
    },
    4: {
        sort: 22
    }
}

Если пользователь установит item 2 в четвертый элемент itemList, то будет [4, 1, 3, 2], а данные, отправленные на сервер, должны быть:

{
    1: {
        sort: 80
    },
    2: {
        sort: 440
    },
    3: {
        sort: 131
    },
    4: {
        sort: 22
    }
}

Как мне добиться этой функциональности?

1 Ответ

0 голосов
/ 15 сентября 2018

Вот как вы можете этого достичь

var getUpdatedItems = (function() { 

    var items = {
        1: {
            sort: 131,
            name: 'Item 1'
        },
        2: {
            sort: 22,
            name: 'Item 2'
        },
        3: {
            sort: 440,
            name: 'Item 3'
        },
        4: {
            sort: 80,
            name: 'Item 4'
        }
    },
    itemsList = [];

    function _getUpdatedItems(newItemsList) {
        itemsList = Object.entries(items).sort(([,a], [,b]) => a.sort - b.sort).map(([data]) => data);

        var dataToSend = {};
        newItemsList.forEach((key, index) => key != itemsList[index] && (dataToSend[key] = { sort: items[itemsList[index]].sort }))

        console.log(dataToSend)
    }

    return _getUpdatedItems;

})()

// you can test with below test and you will get expected result
getUpdatedItems([4,2,1,3]) 

getUpdatedItems([4,1,3,2])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...