Javascript 以数组作为第一个参数,以函数作为第二个参数的函数

Javascript 以数组作为第一个参数,以函数作为第二个参数的函数,javascript,function,higher-order-functions,Javascript,Function,Higher Order Functions,我必须编写一个函数,将数组作为第一个参数,将函数作为第二个参数。因此,只有当谓词为数组的所有元素返回true时,它才应该返回true。我编写了两个函数:“every”接受一个数组,另一个函数称为“isOne”(检测某个元素是否等于1),但由于某种原因,它不起作用。请帮我找出问题出在哪里 let someArray = [1,1,1]; function every(array, someFunction) { var i = 0; var element = array[i]; w

我必须编写一个函数,将数组作为第一个参数,将函数作为第二个参数。因此,只有当谓词为数组的所有元素返回true时,它才应该返回true。我编写了两个函数:“every”接受一个数组,另一个函数称为“isOne”(检测某个元素是否等于1),但由于某种原因,它不起作用。请帮我找出问题出在哪里

let someArray = [1,1,1];

function every(array, someFunction) {
  var i = 0;
  var element = array[i];
  while (i < array.length) {
    if (someFunction == false) {
        return false;
        break;
    }
    else {
        return true;
        i++;
    }
  }
}

function ifOne (element) {
    if (element !== 1) {
        return false;
    }
    else {
        return true;
    }
}

console.log(every(someArray, ifOne()));
让someArray=[1,1,1];
函数every(数组、someFunction){
var i=0;
var元素=数组[i];
while(i
您需要将代码更新为以下内容

  • 传递函数而不是其响应-
    every(someArray,ifOne)
  • 调用函数并比较其响应-
    someFunction(element)=false
  • 使用
    var element=array[i]
    时,循环外部永远不会更改迭代时的值,因此,要获得正确的值,请将其移动到循环内部
  • 创建一个
    true
    返回变量,并为falsy条件将其设置为false,然后中断循环
  • 对于false值,您可以将if条件更新为
    if(!someFunction(element))
    。请注意,这不是强制更新,您可以跳过它
让someArray=[1,1,1];
函数every(数组、someFunction){
var i=0;
var结果=真;
while(ilog(每个(someArray,ifOne))someFunction
,3。只有当所有元素都通过时,才需要返回true。我想知道为什么第一个未简化的代码不起作用(因为它返回“true”,而例如,someArray=[1,2,1]),而简化的代码却起作用。@lashamerebashvili:这是因为循环从未更改
元素的值
(它总是
数组[i]
i
0
时起分配到循环外部;更改
i
不会追溯更改
元素
以引用
数组中的不同元素。您的原始代码也有同样的问题。您好。我从未检查原始代码中的逻辑,因此没有注意到其中的问题。暗影游侠正确地指出了错误。当我回来时,我将为原始代码提供更新的更正。那么我应该怎么做才能更改元素?@lashamerebashvili-请查看更新的代码以获得解释。