Vlad024
@Vlad024

Как посчитать кол-во вызовов функции с определенным аргументом?

Привет.

Пытаюсь решить задачку - https://jsfiddle.net/591oL2wt/

"Написать функцию высшего порядка, которая принимает на вход функцию и возвращает функцию, которая ведет себя точно так же, как исходная, но имеет метод, который позволяет определить, какое количество раз данная функция вызывалась с данным аргументом calc.totalRun(argument) => number"

Пример вызова calc:
calc(1, 2, 3);
calc(1, 3, 9);
calc(1, 1, 5);


Пример того, что должно быть при вызове метода
console.log(calc.totalRun(1)); // -> запускалась 3 раза
console.log(calc.totalRun(3)); // -> запускалась 2 раза
console.log(calc.totalRun(5)); // -> запускалась 1 раз


Функции и метод написал, но загвоздка в массиве args. Если конструкцию (args.includes(number)) поиска в нем аргумента писать внутри метода totalRun, то элементы в args всегда приходят равными аргументам в последнем вызове функции calc.

Если вынести поиск за пределы метода, то считает правильно, но из-за области видимости нельзя передать аргумент который принимает метод.

Помогите понять где ошибка и почему?
  • Вопрос задан
  • 1234 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
function counter(originalFunc) {
  const fun = function(...args) {
    args
      .filter((v, i, a) => a.indexOf(v) === i)
      .forEach((v) => fun.counts[v] = (fun.counts[v] ?? 0) + 1);
    return originalFunc(...args);
  }
  fun.counts = {};
  fun.totalRun = (arg) => fun.counts[arg] ?? 0;
  return fun;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы