javascript - 如何重构这个高阶函数
问题描述
我在尝试重构这个“每个”函数以使其使用内置的“减少”方法时遇到了一些麻烦。
这是 Javascript
const greaterThan5 = num => true ? num > 5 : false;
function every(array, callback) {
for (let element of array) {
if (callback(element) === false) return false
}
return true;
}
function every (array, callback) {
return array.reduce(function (acc, cur){
// IDK what to put here
}, callback(array[0])
}
console.log('expected : false', every([10, -20, 30], greaterThan5))
console.log('expected : true', every([10, 20, 30], greaterThan5))
解决方案
我会做这样的事情:
function every(array, callback) {
return array.reduce(function(acc, cur) {
if (acc) {
return callback(cur);
}
return false;
}, true);
}
唯一的区别是,第一个解决方案将在第一个解决方案中停止,false
而带有的解决方案将reduce()
继续进行,直到检查所有数组元素。
测试
function every(array, callback) {
return array.reduce(function(acc, cur) {
if (acc) {
return callback(cur);
}
return false;
}, true);
}
console.log(every([1,2,3,4], (n) => n < 5));
console.log(every([1,2,5,4], (n) => n < 5));
在reduce()
它之后不会停止false
:
function every(array, callback) {
return array.reduce(function(acc, cur) {
console.log("Checking " + cur + "...");
if (acc) {
return callback(cur);
}
return false;
}, true);
}
console.log(every([1,2,3,4], (n) => n < 5));
console.log(every([1,2,5,4], (n) => n < 5));
推荐阅读
- excel - 修复工作表中堆栈空间外的错误_选择更改
- javascript - JS中的基本数学问题
- python-3.x - tkinter.LabelFrame 与 Checkbutton labelwidget
- sql - 如何在表 Sql 中查找缺失的数据
- python - 如何在不使用 try/except 的情况下检查字符串是否可以转换为浮点或整数值?
- python - 用python切片mp3文件
- php - 在 WooCommerce 电子邮件订单项目中显示可变产品的产品自定义字段
- c++ - Visual Studio Code C++ 调试器不启动
- c++ - arduino 的 C++ 是否遵循标准?
- python - 从多个工作表 Excel 文件中检索到的 Dict 中删除一列