Почему не работает indexof в google sheets?

Пытаюсь найти значение в базе имен, но возвращает -1:
function myFunction() {
  let app = SpreadsheetApp;
  let table = app.getActiveSpreadsheet();
  let sheetAdd = table.getSheetByName("add");
  let sheetRes = table.getSheetByName("result");
  
  let ar = sheetAdd.getActiveCell(); //Получаем активную ячейку
  let valToFind = ar.getValue(); // Получаем значение активной ячейки
  let names = sheetRes.getRange(2, 1, 12, 1).getValues();
  let row = names.indexOf([valToFind]);
  console.log(row, names, [valToFind]) 
}
Вывод:
-1
Список names:
[ [ 'Ivan P' ],
  [ 'Roman N' ],
  [ 'Nik L' ],
  [ 'George S' ],
  [ 'Roland H' ],
  [ 'Cris T' ],
  [ 'Ray B' ],
  [ 'Dmitriy M' ],
  [ 'Stan S' ],
  [ 'Jane M' ],
  [ 'Julia R' ],
  [ 'Tanya S' ] ]

Переменная [valToFind]:
[ 'George S' ]
  • Вопрос задан
  • 234 просмотра
Решения вопроса 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Потому что в JS ни один массив не равен другому массиву, даже если у них одинаковое содержимое. А indexOf ещё и строгое сравнение использует.
Перепишите логику нахождения номера строки на простой цикл или преобразуйте свой массив:
let row = names.map((row) => row[0]).indexOf(valToFind);
Ответ написан
Seasle
@Seasle Куратор тега JavaScript
names.findIndex((values) => values.some((value) => value === 'George S'))
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы