Eloquent JavaScript 第3版第5章练习3

Eloquent JavaScript 3rd Edition Chapter 5 Exercise 3

我对最新的第 3 版中的这个特定练习有困难。这是高阶函数章节。本版第 5 章。练习提示如下:

" 类似于 some 方法,数组也有一个 every 方法。这个 returns true 当给定function returns true for every element in a way. 在某种程度上,some 是 || 运算符的一个版本,作用于数组,every 类似于 && 运算符。

every实现为一个以数组和谓词函数为参数的函数。写两个版本,一个使用循环,一个使用some方法。"

在代码 sandbox 中,建议的函数如下所示:

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

查看测试用例,我似乎无法完全弄清楚如何将数组参数传递给测试参数,其中测试参数可以是任何东西。作者只是说 "a predicate function." 我想我可以坚持使用 n 作为变量,但似乎作者希望我编写自己的 array.prototype.every() 方法.

有人对这个练习的目的有任何见解吗?或者有人想指出我遗漏了什么?

当你调用一个函数时,你并不关心参数变量的名称是什么。您只需将所需的值作为参数传递,其余的由函数处理。

因此您只需调用 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