1、函数式编程
函数式编程用来描述数据(函数)之间的映射
const BlogController = {
index (posts) { return Views.index(posts)},
show (posts) { return Views.show(posts)},
create (posts) { return Db.create(posts)},
update (posts) { return Db.update(posts)},
destroy (posts) { return Db.destroy(posts)},
};
// 优化
const BlogController = {
index: Views.index,
show: Views.show,
create: return Db.create,
update: return Db.update,
destroy: Db.destroy,
};
2、模拟常用高阶函数
2.1 调用一次的函数
// onec
function once (fn){
let done = false;
return function(){
if (!done){
done = true
return fn.apply(this, arguments)
}
}
}
let pay = once(function (money){
console.log(`支付:${money} RMB`)
})
pay(5);
pay(5);
pay(5);
pay(5); // 只调用一次
2.2、map对数组的所有元素进行相同的操作
const map = (array, fn) => {
const results = [];
for (const value of array){
results.push(fn(value));
}
return results;
};
const arr = [1, 2, 3, 4];
const arr1 = map(arr, v => v ** 2);
console.log(arr1);
2.3、every用来判断数组中的每个元素是否匹配指定的一个条件
const every = (array, fn) => {
let result = true;
for (const value of array) {
result = fn(value);
if (!result){
break;
}
}
return result;
};
const arr = [1, 2, 3, 4];
const r = every(arr, x => x > 0);
console.log(r);
2.4、some用来检测数组中是否有满足条件的元素
const some = (array, fn) => {
let result = false;
for (const value of array){
result = fn(value);
if (result){
break;
}
}
return result;
};
const arr = [1, 2, 3, 4];
const r = some(arr, x => x % 2 === 0);
console.log(r);