美文网首页
js函数式编程最佳实践 - 持续更新

js函数式编程最佳实践 - 持续更新

作者: 龙旗飘扬的舰队 | 来源:发表于2019-01-29 15:07 被阅读4次

函数式编程最佳实践

学习文档


数组字串处理

function addString(el){
  return el + "0";
}
var newArr = arr.map(addString).join("");
var arr = ["1","2","3","4"];
console.log(newArr);

创建 tags

// 创建 - 单个
function createTag(val) {
    return '<div class = "dp-tag" >' + val.text + '</div>';
}
// 创建 - 全部,三个版本
// 1
function createAllTag(params) {
    var str = "";
    params.forEach(function (x) {
        str += createTag(x.text);
    })
    return str;
}
// 2
function createAllTag(params) {
    return params.map(function (x) {
        return createTag(x.text);
    }).join("");
}
// 3
function createAllTag(params) {
    return params.reduce(function (tags, x) {
        return tags += createTag(x.text);
    }, "");}
}
var str = createAllTag([{text:111},{text:222}]);
$("body").html(str)

创建表格

function createTableTd(td){
  return "<td>" + td + "</td>";
}
function createTableTr(row){
  return "<tr>" + row.map(createTableTd).join("") + "</tr>";
}
function createTable(data){
  return "<table>" + data.map(createTableTr).join("") + "</table>";
}

var data = [[1,2],[3,4]];
var res = createTable(data);
console.log(res);

实现一个展示/收起功能

var collectBoard = {
  dom:$("#board"),
  data:[],
  show:false,
  updateData:function(){
    this.data = [1,2,3]; 
  },
  toggle:function(){
    this.show = !this.show;
    if(this.show){
      this.updateData();
    }
    console.log(this.show,this.data);
  },
  init:function(){
    var that = this;
    this.dom.click(function(){
      that.toggle();
    })
  }
}
collectBoard.init();

倾向于对象遍历而不是Switch语句

//倾向于对象遍历而不是Switch语句
const fruitColor = {
  red: ['apple', 'strawberry'],
  yellow: ['banana', 'pineapple'],
  purple: ['grape', 'plum']
};

function test(color) {
  return fruitColor[color] || [];
}

只执行一次的函数(基于隋性单例模式)

// 能用的包装函数
var getSignle = function(fn){
  var res = null;
  return function(){
    // 理解 apply,即 fn 把传参的权力,让渡给了包装函数 getSignle
    return res || (res = fn.apply(this,arguments));
  }
};
var getName = function(){
  console.log(123);
  return "gs";
}
var onceGetName = getSignle(getName);
onceGetName();// 123 gs
onceGetName();// gs
onceGetName();// gs

通过高阶函数,传递 this对象值

//例一
var data = {
  domId:"wrap",
  ...
  // 通过高阶函数,传递 this.domId
  eventList:function(){
    var $domId = $("#"+this.domId);
    return {
      clickTag:function(){
        $domId.on("click","button",function(){
          $(this).remove();
        });
        this.clickTag = null;
      },
      clickToChangeFooter:function(){
        $domId.on("click","footer",function(){
          $(this).text("footer changed")
        });
        this.clickToChangeFooter = null;
      }
    }
  },
  // 不使用高阶函数,clickTag 函数中的this仅指向 clickTag 本身,且外层数据难以传递
  eventList:{
    clickTag:function(this.domId){
      $("#"+this.domId).on("click","button",function(){
        $(this).remove();
      });
      this.clickTag = null;
    }
  }
}
//例二
var obj = {
    a:1,
    b:function(){
        console.log(this)   
    }
}
// {a: 1, b: ƒ}
// this就是会指向最近的对象

编写函数实现链式调用

核心就是在函数尾部,返回那个对象

var student = {
  name:"zk",
  age:19,
  setName:function(name){
    this.name = name;
    return this;
  },
  setAge:function(age){
    this.age = age;
    return this;
  }
};

student.setName("gs").setAge(22);
console.log(student);

连续使用箭头函数

  • 只有最后是执行,其它均为参数,可以理解为柯里化
const splat = handle => (...array) => handle(array)
const fun = array => array.reduce((a, b) => a * b);
const res = splat(fun)(1, 2, 3, 4)

const add = a => b => c => a+b+c;
console.log(add(1)(2)(3))

更改一个嵌套对象数据的值

  • 利用this指向,减少引用对象层级
//这个模式,避免了出现 dp.data.treelist = dp.data.treelist.map(...)
var obj = {
  list:{
    data:[1,2,3],
    update:function(){
    //注意,this指向父级,而不是最外层对象
      this.data = this.data.map(function(x){
        return x * x;
      })
    }
  }
}
obj.list.update()
console.log(obj);

相关文章

  • js函数式编程最佳实践 - 持续更新

    函数式编程最佳实践 学习文档 函数式编程术语 数组字串处理 创建 tags 创建表格 实现一个展示/收起功能 倾向...

  • 深入浅出Rxjs笔记 一

    一.函数式编程 函数式编程要求: 声明式 纯函数 数据不可变js 不算纯粹意义上的函数式编程语言,但是,在js中函...

  • 函数式编程最佳实践

    别人说烂了的stream api不就不想赘述了,我想和大家分享一下如何用函数式编程来简化我们的开发,想说点不一样的...

  • JavaScript中的函数式编程

    JS 函数式编程指南 什么是函数式编程 简单说,"函数式编程"是一种"编程模型"(programming para...

  • Day24 知识点 part1

    持续 SQL交互学习 JS 函数式编程指南 React.js 小书 碎片 css-animation-101 He...

  • js函数式编程术语总结 - 持续更新

    参考文档1 参考文档2 函数式编程术语 高阶函数 Higher-Order Functions 以函数为参数的函数...

  • 【JavaScript】技术参考资料

    JS基础、高级、进阶 MDN·JavaScript 函数式编程 阮一峰老师的入门简介: 函数式编程初探、函数式编程...

  • Python函数式编程

    在 Python 中使用函数式编程的最佳实践! 简 介 Python 是一种功能丰富的高级编程语言。它有通用的...

  • 函数式编程语言Elixir

    函数式编程可能js中用得也不少,至于什么是函数式编程,思想精髓暂时没有。 Elixir : 函数式编程 1、安装环...

  • Python函数式编程最佳实践

    Python并非经典的FP(Functional Programming, 函数式编程)语言,用其原生的map/f...

网友评论

      本文标题:js函数式编程最佳实践 - 持续更新

      本文链接:https://www.haomeiwen.com/subject/ibyxsqtx.html