#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< }