Аналитика пользователей


#1

Может кому пригодится решение

Summary
var usersData = ['Виталий Иванович', 'Иннокентий Петрович', 'Александр Александрович', 'Игорь Олегович', 'Евгений Петрович', 'Игнат Денисович', 'Сергей Александрович', 'Семён Петрович'];
var query = 'Александрович';
var matchingUsers = 0;

for(var i = 0; i < usersData.length; i++) {
  if(usersData[i].indexOf(query) >= 0) {
    matchingUsers++;
    }
  }

#2

Подскажите:
пишу if (usersData[i].indexOf(query) >= 0 - программа говорит синтаксическая ошибка на этой строке. в каком месте?


#3

Забыли закрывающую скобку после 0


#4

Условие написал через “не равно”:

   if (usersData[i].indexOf(query) !== -1) {...}

#5
var usersData = ['Виталий Иванович', 'Иннокентий Петрович', 'Александр Александрович', 'Игорь Олегович', 'Евгений Петрович', 'Игнат Денисович', 'Сергей Александрович', 'Семён Петрович'];
var query = 'Александрович';
var matchingUsers = 0;

matchingUsers = usersData.filter((item) => item.indexOf(query) !== -1).length;

#6

Мой вариант :smirk_cat:

Аналитика пользователей
console.log('Программа "Аналитика пользователей" by Nerealist');

var usersData = ['Виталий Иванович', 'Иннокентий Петрович', 'Александр Александрович', 'Игорь Олегович', 'Евгений Петрович', 'Игнат Денисович', 'Сергей Александрович', 'Семён Петрович'];
var query = 'Александрович';
var matchingUsers = 0;

console.log('Массив данных пользователей: ' + usersData + '. Критерий - ' + query);

for (var i = 0; i < usersData.length; i++) {
  if (usersData[i].indexOf(query) > -1) {
    matchingUsers++;
  }
}

console.log('Кол-во подходящих пользователей под заданные критерии : ' + matchingUsers);

#7
var usersData = ['Виталий Иванович', 'Иннокентий Петрович', 'Александр Александрович', 'Игорь Олегович', 'Евгений Петрович', 'Игнат Денисович', 'Сергей Александрович', 'Семён Петрович'];
var query = 'Александрович';
var matchingUsers = 0;

for (var i = 0; i <= usersData.length - 1; i++) {
  if (usersData[i].indexOf(query) > -1) {
      matchingUsers++;
  }
}

#8
var usersData = ['Виталий Иванович', 'Иннокентий Петрович', 'Александр Александрович', 'Игорь Олегович', 'Евгений Петрович', 'Игнат Денисович', 'Сергей Александрович', 'Семён Петрович'];
var query = 'Александрович';
var matchingUsers = 0;

for (var i = 0; i < usersData.length; i++) {
 if (usersData[i].indexOf(query) != -1) {
   matchingUsers++;
 }
}

#9

Хай,

кто может пояснить, почему результаты, кроме первой итерации = 0?

Задачу я решил, мне не понятна логика…
for (var i = 0; i < usersData.length; i++){
if(usersData[i].indexOf(query) > 1){matchingUsers+=1}
}


#10

не итерации, а теста
и код неправильно написан

в цикле вы перебираете элементы массива
у элемента массива вы спрашиваете: значение содержит подстроку 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++}
}

#11

Оооо… А вас, Штирлиц, я попрошу остаться)))

не понятно…так совпадения были на позициях после 1, почему их не считает?

за инкремент, спасиб, если чо)))


#12

да, совпадения по задумке авторов курса были, ваш код на них не срабатывал.
потому что вы указали в сравнении usersData[i].indexOf(query) > 1
indexOf(arg) возвращает первую позицию в массиве, где есть искомый аргумент (он же подстрока).
этот же метод может быть применим к строке (а usersData[i] является строкой).
т.е. метод обращается не к массиву, а строке (как массиву строковых данных). рассмотрим случай из теста, который не попал в счетчик:

[“Людмила Сергеевна”,“Мария Петровна”,“Валерия Брониславовна”,“Елена Васильевна”,“Людмила Львовна”,“Елена Сергеевна”,“Екатерина Максимовна”]
ищем Елену. вот вы как человек посчитайте, скок тут Елен? элемент 4 и 6, их индексы 3 и 5 соотвественно. Но нам это не важно. Рассмотрим usersData[3] = “Елена Васильевна”. Эта строка как бы рассматривается методом indexOf как массив. [“Е”, “л”, “е”, “н”, “а”, " ", “В”, “а”, “с”, “и”, “л”, “ь”, “е”, “в”, “н”, “а”]
Ищем вхождение подстроки Елена в этот “массив”. Ага, Елена нашлась в элементе с индексом 0.
Но вы же указали > 1, а значит строка не может начинаться на Елена (по-вашему), хотя если бы было “Павлова Елена”, то вполне нашлось бы (бтв, не нашлось бы еще в “ХЕлена Джоновна”).
Итак, все элементы исходного массива, которые начинаются на Елена, не попадают в выборку (а должны ваще-то).