Фильтрация результатов JSON с помощью jQuery - PullRequest
6 голосов
/ 04 июня 2019

Здесь есть поисковая система JSON здесь . Я пытаюсь выяснить, как я могу отфильтровать результаты листа Google, чтобы включить в него элементы с символами от 4 до 7, например:

entry.filter(entry => entry.gsx$status.$t.length > 7 || entry.gsx$status.$t.length < 4)

Итак, в jQuery я сделал это:

mounted: function () {
     var entry = data.feed.entry;
     var result = entry.filter(entry => entry.gsx$status.$t.length > 7 || entry.gsx$status.$t.length < 4); 
$.ajax({
      dataType: "json",
      url: GSHEET_JSON_URL + '&cache-buster=' + Math.random(),
      success: function(data, result) {
            if (data && data.feed && data.feed.entry && data.feed.entry[0]) {.....etc....

Затем я предположил, что оно должно было войти в оператор if (согласно предложению в комментариях), но операторы if уже настолько заполнены, я поместил его после строки, в которой написано data.feed.entry.forEach(function(entry) (строка 19 ниже), а также протестировал его. до этой строки.

Моя проблема в том, что я не могу понять, куда поместить его в указанном коде. Я попытался поместить фильтр ввода в строку 150 (обратите внимание на проект GitHub), но он не выдает ошибок и не работает. Возможно я пытаюсь поместить это в неправильный раздел? Я полагал, что это должно пойти сразу после вызова AJAX. Например, в этом разделе:

  mounted: function () {
             $.ajax({
          dataType: "json",
          url: GSHEET_JSON_URL + '&cache-buster=' + Math.random(),
                   success: function(data) {
            if (data && data.feed && data.feed.entry && data.feed.entry[0         var missing = ['customer', 'regisnbrtx', 'num', 'description', 'qty', 'price', 'total', 'address', 'status'].filter(function(name) {
                return !data.feed.entry[0]['gsx$' + name];
              });
              if (missing[0]) {
                vueSearch.error = 'You must add the "`' + missing.join('`", "`').replace(/, (?!.*,)/, ', and ') + '`" field' + (missing[1] ? 's' : '') + '.';
                return;
              }
            }
            else {
              vueSearch.error = 'The specified GSHEET_JSON_URL is invalid:<br>`' + GSHEET_JSON_URL + '`';
              return;
            }

            data.feed.entry.forEach(function(entry) {

              vueSearch.links.push({
                customer: entry.gsx$customer.$t, 
                regisnbrtx: entry.gsx$regisnbrtx.$t,
                num: entry.gsx$num.$t,
                description: entry.gsx$description.$t,
                qty: entry.gsx$qty.$t,
                price: entry.gsx$price.$t,
                total: entry.gsx$total.$t,
                address: entry.gsx$address.$t,
                status: entry.gsx$status.$t,
                partrecieved: entry.gsx$partrecieved.$t,
                date: entry.gsx$date.$t,
                shipdate: entry.gsx$shipdate.$t,
                itemrec: entry.gsx$itemrec.$t,
                comments: entry.gsx$comments.$t
              });
            });

            vueSearch.loading = false;
            vueSearch.updateResults();
          },
          error: function() {
            vueSearch.error = 'The specified GSHEET_JSON_URL does not contain JSON:<br>`' + GSHEET_JSON_URL + '`';
            vueSearch.loading = false;
          }
        });
        // Set focus to search box
        $('#barcoder').select();
      }
    });
  });

Я могу сделать это просто jQuery, но когда я объединяю это в Ajax, это оставляет меня в растерянности. Здесь есть несколько постов по фильтрации, но не по длине символа из того, что я нашел.

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

1 Ответ

0 голосов
/ 07 июня 2019

Нашли!

В строке 76-80 оригинала вы можете изменить соответствие переменных "что угодно" и отфильтровать результаты.Он по-прежнему будет импортировать все результаты, но он будет корректироваться для удаления результатов, содержащих строку, указанную вами при вводе условий поиска.Например:

var results = self.links
            .reduce(function(scores, link, linkIndex) {
              var score = searchTerms.reduce(function(score, searchTerm) {
                if (score !== false) {

     //modify one of these below, my example on the first var:

                  var matchesTitle = ((link.title).match('YOURSTRINGHERE'));
                  var matchesURL = (link.url.match(searchTerm.rgx) || '').length;
                  var matchesDescr = ((link.description || '').match(searchTerm.rgx) || '').length;
                  var matchesKeywords = ((link.keywords || '').match(searchTerm.rgx) || '').length;
                  var matchesAny = !!(matchesTitle || matchesURL || matchesDescr || matchesKeywords);
                  return searchTerm.must !== !matchesAny
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...