函数式编程-模拟常用的高阶函数

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);
打赏 赞(0)

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注