javascript - 无法调用更高级别的函数
问题描述
我在一个在线学习网站上练习 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)
解决方案
您也可以使用 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));
推荐阅读
- python - AttributeError:模块“时间”在 Python 3.8 中没有属性“时钟”
- flutter - 当我移动到带有导航器的新页面时,是否可以选择显示或隐藏底部导航栏?
- javascript - 如何将变量从 JS 传递到 JSX?
- javascript - Javscript 从具有相同属性的不同对象创建公共对象,并具有相同的键和添加量
- angular - Angular 4 循环依赖检测到 src\app\app.module.ts
- css - 在 scss 中导入字体变体 - React
- c++ - 我的 fahrenheit-celcius 程序忽略了我的 if-else 语句,并且每次运行程序时都将值更改为 0
- java - 如何使用主机名验证器?
- javascript - ES6:如何在库的多个文件中重用 const 变量但不将其暴露给客户端代码?
- oracle - 在 Oracle 12c 中进行插值的 Oracle SQL 查询