в цикле вы перебираете элементы массива
у элемента массива вы спрашиваете: значение содержит подстроку query на позициях 2+?
если да, увеличивается счетчик matchingUsers (бтв, в случае с +1 используют инкремент, если чо).
0 вам выдает, потому что в счетчик не попало совпадений на позициях больше 1.
вообще метод indexOf возвращает -1 если не найдено совпадений, а если найдено, то от 0, а не 2.
поэтому код должен быть таким:
for (var i = 0; i < usersData.length; i++) {
if (usersData[i].indexOf(query) > -1) {matchingUsers++}
}
или
for (var i = 0; i < usersData.length; i++) {
if (usersData[i].indexOf(query) >= 0) {matchingUsers++}
}
или
for (var i = 0; i < usersData.length; i++) {
if (~usersData[i].indexOf(query)) {matchingUsers++}
}
да, совпадения по задумке авторов курса были, ваш код на них не срабатывал.
потому что вы указали в сравнении usersData[i].indexOf(query) > 1
indexOf(arg) возвращает первую позицию в массиве, где есть искомый аргумент (он же подстрока).
этот же метод может быть применим к строке (а usersData[i] является строкой).
т.е. метод обращается не к массиву, а строке (как массиву строковых данных). рассмотрим случай из теста, который не попал в счетчик:
[“Людмила Сергеевна”,“Мария Петровна”,“Валерия Брониславовна”,“Елена Васильевна”,“Людмила Львовна”,“Елена Сергеевна”,“Екатерина Максимовна”]
ищем Елену. вот вы как человек посчитайте, скок тут Елен? элемент 4 и 6, их индексы 3 и 5 соотвественно. Но нам это не важно. Рассмотрим usersData[3] = “Елена Васильевна”. Эта строка как бы рассматривается методом indexOf как массив. [“Е”, “л”, “е”, “н”, “а”, " ", “В”, “а”, “с”, “и”, “л”, “ь”, “е”, “в”, “н”, “а”]
Ищем вхождение подстроки Елена в этот “массив”. Ага, Елена нашлась в элементе с индексом 0.
Но вы же указали > 1, а значит строка не может начинаться на Елена (по-вашему), хотя если бы было “Павлова Елена”, то вполне нашлось бы (бтв, не нашлось бы еще в “ХЕлена Джоновна”).
Итак, все элементы исходного массива, которые начинаются на Елена, не попадают в выборку (а должны ваще-то).