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

时间:2018-10-04 14:32:55

标签: javascript function higher-order-functions

我必须编写将数组作为第一个参数并将函数作为第二个参数的函数。因此,仅当谓词对数组的所有元素返回true时,它才应返回true。我已经编写了两个函数:“每个”带有一个数组,另一个函数名为“ isOne”(用于检测某个元素是否等于一个),但是由于某种原因,它不起作用。请帮我找出问题所在。

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()));

1 个答案:

答案 0 :(得分:0)

您需要将代码更新为关注

  • 传递函数而不是其响应-every(someArray, ifOne)
  • 调用函数并比较其响应-someFunction(element) == false
  • var element = array[i]置于循环之外将永远不会在迭代时更改值,因此,要获得正确的值,请将其移入循环。
  • 创建一个true返回变量,并在 falsy 条件下将其设置为false并中断循环。
  • 对于假值,也可以将if条件更新为if (!someFunction(element))。请注意,这不是强制性更新,您可以跳过它。

let someArray = [1, 1, 1];

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

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

console.log(every(someArray, ifOne));

请注意,您还可以按照以下步骤简化代码

let someArray = [1,1,1];

function every(array, someFunction) {
  return array.every(v => someFunction(v));
}

function ifOne (element) {
    return element === 1;
}

console.log(every(someArray, ifOne));