Фильтровать повторяющиеся значения в вызове select2 ajax - PullRequest
0 голосов
/ 23 октября 2019

Я использую select2 способ загрузки удаленных данных для рендеринга результатов (по 50 за раз) из API. Ответ API может иметь повторяющиеся значения в любом ответе страницы.

Я попытался отформатировать ответ, но, к сожалению, метод имеет доступ только к данным текущей страницы.

Ниже приведен мой код,

jQuery('#items').select2({
    minimumInputLength : 2,
    placeholder        : '-- Select Items --',
    ajax : {
        url      : '/api/v1/items',
        quietMillis : 200,
        dataType : 'json', 
        data     : function (term, page) {
            return {
                term : term,
                page : page,
                page_limit : 50
            };
        },
        results  : function(data, page) {
            //Here I'm getting only current page data. How can i get previous page data to check for duplicate values.
        } 
    }
});

Итак, как я могу отфильтровать ответ и устранить повторяющиеся значения, проверяя данные, выбранные до сих пор.

Любая помощь будетбыть оцененным.

1 Ответ

0 голосов
/ 23 октября 2019

Было бы лучше, если вы опубликуете пример своего кода. Допустим, у вас есть некоторые данные с дублированными записями:

var rawData = [
  {
    id: 'AL',
    name: 'Alaska'
  },
  {
    id: 'GE',
    name: 'Georgia'
  },
  {
    id: 'WY',
    name: 'Wyoming'
  },
  {
    id: 'GE',
    name: 'Georgia'
  }
];


function clearDuplicates(data) {
  var temp = {};
  
  for (var i = 0; i < data.length; i++) {
    temp[data[i]['id']] = data[i];
  }
  
  return Object.values(temp);
}


var clearData = clearDuplicates(rawData);

console.log(clearData);

См. Вывод: дублированная запись «Грузия» теперь в одной записи. Там может быть много способов устранения дубликатов. Это только один простой пример.


ОБНОВЛЕНИЕ:

Если вы используете нумерацию страниц (бесконечная прокрутка) в Select2, каждый запрос страницы отправляется отдельно, и у вас естьобрабатывать данные результатов и устранять дубликаты вручную. это можно сделать с помощью параметра processResults. (См. пример )

В таком случае проще всего было бы:

  1. Обработать каждый запрос страницы в processResults
  2. Сохранить всеприводит к глобальной переменной
  3. Устраняет дубликаты, как описано в примере выше
  4. Возвращает желаемый результат

Возвращается:

  return {
    results: <YOUR_FILTERED_DATA>,
    pagination: {
      //paginatioin params
    }
  }
...