Показывать только уникальные результаты поиска в формате html с возможностью просмотра данных

#javascript #google-apps-script #datatables

Вопрос:

Я создал веб-приложение CRUD на основе Googlesheet. Я получаю дубликаты результатов поиска, когда пытаюсь выполнить поиск по нескольким строкам и столбцам html-данных в веб-приложении. Это происходит, когда поисковый тест сопоставляет данные в нескольких столбцах одной и той же строки. Как я могу заставить его отображать только уникальные результаты? Как изменить мой код для поиска только по первым 3/4 столбцам?

Пример повторяющихся результатов поиска в вводе поиска веб-приложения: тест:

Пример повторяющихся результатов поиска в веб - приложении- ввод поиска: тест

Код скрипта Google:

 function searchData(formObject){   var result = [];  if(formObject.searchtext){//Execute if form passes search text  var data = Sheets.Spreadsheets.Values.get(globalVariables().spreadsheetId, globalVariables().dataRange).values;  for(var i=0;i<data.length;i  ){  for(var j=0;j<data[i].length;j  ){  if(data[i][j].toLowerCase().search(formObject.searchtext.toLowerCase())!=-1){  result.push(data[i])  }  }  }  }  return resu< }  

язык JavaScript

 function handleSearchForm(formObject) {  google.script.run.withSuccessHandler(createTable).searchData(formObject);  document.getElementById("search-form").reset();  }  
 <!-- SEARCH FORM--> <form id="search-form" class="form-inline" onsubmit="handleSearchForm(this)">  <div class="form-group mx-sm-3 mb-2">  <label for="searchtext" class="sr-only">Search Text</label>  <input type="search" class="form-control form-control-sm" id="searchtext" name="searchtext" placeholder="Search">  </div>  <button type="submit" class="btn btn-sm btn-primary mb-2">Search</button>  

Ответ №1:

это часть скрипта, которая выполняет поиск по всем столбцам в одной строке:

 for(var j=0;j<data[i].length;j  ){  if(data[i][j].toLowerCase().search(formObject.searchtext.toLowerCase())!=-1){  result.push(data[i])  }  }  

Если вы хотите выполнить поиск только по, например, первому столбцу, вы можете заменить этот код на:

 const COLUMN_INDEX = 0; if(data[i][COLUMN_INDEX].toLowerCase().search(formObject.searchtext.toLowerCase())!=-1){  result.push(data[i]) }  

Комментарии:

1. Однако попытка поиска по колонке 4, похоже, не работает для меня. //CODE FOR DATA SEARCH function searchData(formObject){ var result = []; if(formObject.searchtext){//Execute if form passes search text var data = Sheets.Spreadsheets.Values.get(globalVariables().spreadsheetId, globalVariables().dataRange).values; for(var i=0;i<data.length;i ){ const COLUMN_INDEX = 4; if(data[i][COLUMN_INDEX].toLowerCase().search(formObject.searchtext.toLowerCase())!=-1){ result.push(data[i]) } } } return resu< }