• 函数式编程


    函数式编程 顾名思义就是不依赖外界影响而变化,只依靠自身的输入和输出来得到自己想要的

    例子1

    var arr = [{name:'123'}]
    function add(_arr) {
        var obj= {name: 'cst'}
        var newArr = []
        for(var i = 0; i < _arr.length; i++) {
            newArr[i] = _arr[i]
        }
        newArr.push(obj)
        return newArr
    }
    var newArr = add(arr)
    
    arr => // [{name:'123'}]
    
    newArr => // [{name: '123'}, {name: 'cst'}]
    改变新创建出来的newAr
    newArr[0].name = 'ccc'
    =====>// "ccc"
    
    打印arr
    arr[0].name        // 会发现输出也是"ccc"
    
    -------
    改变原来的 arr 的name值
    arr[0].name='aaaaaa'
    =======> // 'aaaaaa'
    
    打印newArr
    newArr[0].name    // 会发现输出的结构是arr改变后的值 即 'aaaaaa'

    上面一个例子已经很接近纯函数了,但是,如果改变改变arr或newArr共同的值 name时候都会影响到另一个值的改变

    下面是优化后的

          function isObject(obj) {
            return typeof obj === "object" && obj != null;
          }
    
          const deepClone = (source, hash = new WeakMap()) => {
            if (!isObject(source)) return source;
            if (hash.has(source)) return has.get(source);
            const target = Array.isArray(source) ? [] : {};
            hash.set(source, target);
            for (key in source) {
              if (Object.prototype.hasOwnProperty.call(source, key)) {
                target[key] = deepClone(source[key], hash);
              }
            }
            return target;
          };
    
          
          var arrs = [{ name: "123" }];
          function add(_arr) {
            var obj = { name: "cst" };
            var newArrs = [];
            for (var i = 0; i < _arr.length; i++) {
              newArrs[i] = deepClone(_arr[i]);  // 使用deepClone() 方法进行深度拷贝
            }
            newArrs.push(obj);
            return newArrs;
          }

    例子2:  使用map来创建新的值

    var rooms = ['h1','h2','h3','h4']
    
    var newRooms = rooms.map(function(rm) {
        if(rm == 'h3') {
                 return 'h5'
            }else {
                return rm
            }
    })
    
    rooms => //  ['h1','h2','h3','h4']
    
    newRooms => //["h1", "h2", "h5", "h4"]   
  • 相关阅读:
    iPhone6虽好,但也要借鉴这八个功能
    中小型企业商业智能平台的开发和实现(数据仓库、BI系统、真实项目实战)
    iOS开发入门教程_iOS开发视频教程
    零基础入门jQuery视频教程
    零基础3G Android移动开发就业培训
    请求库requesets库使用
    请求头加引号工具
    请求库urllib使用
    【Liunx】saltstack运维工具
    【Liunx】消息队列rabbitmp
  • 原文地址:https://www.cnblogs.com/PasserByOne/p/12033694.html
Copyright © 2020-2023  润新知