Eloquent JavaScript 3-е издание, глава 5, упражнение 3 - PullRequest
0 голосов
/ 16 апреля 2020

У меня трудности с этим конкретным упражнением из новейшего, 3-го издания. Это глава Функции высшего порядка. Глава 5 в этом издании. Подсказка к упражнению приведена ниже:

"Аналогично методу some , массивы также имеют метод every . Этот возвращает значение true, когда данная функция возвращает true для каждый элемент в массиве. В некотором смысле, some является версией операторов ||, действующих на массивы, а каждый подобен оператору &&.

Реализуйте каждые как функцию, которая принимает массив и функцию предиката в качестве параметров.Пишите две версии, одну с использованием al oop и одну с использованием some . "

В коде песочница предлагаемая функция выглядит следующим образом:

function every(array, test) {
// Your code here.
}

Тестовые образцы выглядят следующим образом:

console.log(every([1, 3, 5], n => n < 10));
// → true
console.log(every([2, 4, 16], n => n < 10));
// → false
console.log(every([], n => n < 10));
// → true

Looking в тестовых случаях я не могу понять, как получить параметр массива для передачи в тестовый параметр, где тестовый параметр может быть НИЧЕГО. Автор просто говорит «предикатная функция». Я думаю, я мог бы придерживаться использования n в качестве переменной, но кажется, что автор хочет, чтобы я написал свой собственный метод array.prototype.every ().

Есть ли у кого-нибудь понимание к чему идет это упражнение? Или, может быть, кто-то хотел бы указать, что мне не хватает?

1 Ответ

0 голосов
/ 16 апреля 2020

Когда вы вызываете функцию, вам все равно, как называются переменные параметра. Вы просто передаете значение, которое хотите, в качестве аргумента, а функция обрабатывает остальное.

Таким образом, вы просто вызываете функцию test() с текущим элементом массива в качестве аргумента.

function every(array, test) {
  for (let i = 0; i < array.length; i++) {
    if (!test(array[i])) {
      return false;
    }
  }
  return true;
}

console.log(every([1, 3, 5], n => n < 10));
// → true
console.log(every([2, 4, 16], n => n < 10));
// → false
console.log(every([], n => n < 10));
// → true
...