首页 > 解决方案 > 无法调用更高级别的函数

问题描述

我在一个在线学习网站上练习 Javascript,但我无法理解这个任务。我想实现一个名为 filter 的函数(不是本机函数),它接受一个数组和一个函数作为其参数。

过滤器函数应调用作为参数发送的函数,其次数与数组中的值一样多,这是有意义的,并应返回一个新数组,该数组仅包含参数函数所针对的数组值返回真。还想在过滤器函数中创建一个空数组,并在其中添加值。

filter([1, 2, 3], function (value) { return value > 1 }) 

...应该作为一个例子返回[2, 3]

这是我之前分配的代码,与这个类似,但到目前为止我被卡住了。我不确定需要进行哪些更改。

let arr = [1, 2, 3]

function _filter(str){
    alert(str)
}

function forEach(arr,callback) {
    for(z=0;z<arr.length;z++){
       callback(arr[z])
    }
}

forEach(arr,_filter)

标签: javascriptarrayshigher-order-functions

解决方案


您也可以使用 Array.prototype.map() 函数。但是,根据 MDN Web 文档上的定义, map() 方法创建了一个新数组,其中填充了在调用数组中的每个元素上调用提供的函数的结果。

在此示例中,如果您将记录 arr.map() 的输出,则地图返回的数组将类似于

[5, undefined, 4]

但在您的情况下,您不必担心,可以将结果推送到新数组中(即:filteredItems)。

console.log(filterArray(arr, callbackFn))将返回您的预期输出->[5,4]

我在这里提到 array.map 的主要原因是它本质上是广泛的,您可以根据需要操纵输出。例如,如果您需要在输出中为不满足您的 callbackFn 条件的项目显示一些指标,那么您可以这样做。另外,我不喜欢 for 循环,所以这也是我的特质。

希望这可以帮助您并拓宽您的 JS 世界 :) 干杯!

let arr = [5, 1, 4]



function filterArray(arr, callbackFn) {
  const filteredItems = [];

  arr.map( (item) => {
    if (callbackFn(item)) {
      filteredItems.push(item)  
    }
  });
  
  return filteredItems;
}

function callbackFn(value) {
  return value > 1;
}

console.log(filterArray(arr, callbackFn));


推荐阅读