Почему результат поиска всегда возвращает undefined?
Функция поиска для бота telegram
function onSearch(searchString) {
var sh = SpreadsheetApp.openById('12EBocrIPnzd7RejDWGa72fNt4WTznpWFtDh_Z2rMAns').getSheetByName("bot");
var values = sh.getDataRange().getValues();
for(var i=0, iLen=values.length; i<iLen; i++) {
if(values[i][2] === searchString) {
return values[i][3];}}}
var search = contents.message.from.id; ;
sdata = onSearch(search);
sendText(id_message, "Дата" + sdata + ");
https://docs.google.com/spreadsheets/d/12EBocrIPnzd7RejDWGa72fNt4WTznpWFtDh_Z2rMAns/edit#gid=0
Должно возвращать дату в том же ряду в котором нашло id пользователя.
Как я не кручу поиск всё время возвращает undefined.
Ответы (1 шт):
Автор решения: contributorpw
→ Ссылка
Лучше всего вести документацию к коду и не делать многозадачных функций
/**
*
* @param {string | number} searchString
* @return {date}
*/
function onSearch(searchString) {
var sh = SpreadsheetApp.openById(
'12EBocrIPnzd7RejDWGa72fNt4WTznpWFtDh_Z2rMAns'
).getSheetByName('Аркуш1');
var values = sh.getDataRange().getValues();
for (var i = 0, iLen = values.length; i < iLen; i++)
if (values[i][2] == searchString) return values[i][3];
return new Date(0);
}
/**
*
*/
function test_onSearch() {
console.log('4938127', onSearch('4938127'));
console.log(4938127, onSearch(4938127));
console.log('xxx', onSearch('xxx'));
console.log(undefined, onSearch(undefined));
}
Как видно, onSearch на вход получает строку или число, возвращает дату. Тестирование проводим с невалидными значениями без крайних
Если у вас включен V8, то
/**
*
* @param {string | number} searchString
* @return {date}
*/
function onSearch(searchString) {
const rowData = SpreadsheetApp.openById(
'12EBocrIPnzd7RejDWGa72fNt4WTznpWFtDh_Z2rMAns'
)
.getSheetByName('Аркуш1')
.getDataRange()
.getValues()
.find(row => row[2] == searchString);
return !rowData ? new Date(0) : rowData[3];
}
