最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 小技巧系列 -- 函数作为函数的形参,可以传入函数进行运转

    正文概述 掘金(ALKAOUA)   2021-07-03   562

    前言

    我们通常有个需求,就是在一个函数里头,对其里面的循环遍历的每一项进行特定的处理操作,比如打印、拷贝、存储、上传、... 等等。

    将外部函数作为函数的形参对应的实参,可以传入外部函数进行运转处理,可以 很大程度地减少耦合现象,也可以让 更多的“机器”(即外部函数)在该函数里面进行处理操作

    实例

    需求

    遍历树结构,然后对树的节点进行处理

    树结构如下:

    let tree = [
      {
        id: '1',
        title: '节点1',
        children: [
          {
            id: '1-1',
            title: '节点1-1'
          },
          {
            id: '1-2',
            title: '节点1-2'
          }
        ]
      },
      {
        id: '2',
        title: '节点2',
        children: [
          {
            id: '2-1',
            title: '节点2-1'
          }
        ]
      }
    ]
    

    想要进行的处理操作可能是 输出、压入数组、... 等等

    代码

    遍历树结构的代码,其中node的就是遍历的节点(关于遍历树的逻辑这里可以不看,只是引入例子)

    // 广度优先遍历
    function treeForeach (tree, fn) {
      let node, list = [...tree] // 使用扩展运算符,不改变原本树结构
      while (node = list.shift()) {
        fn(node)
        node.children && list.push(...node.children)
      }
    }
    // 先序遍历
    function treeForeach (tree, fn) {
      tree.forEach(data => {
        fn(data)
        data.children && treeForeach(data.children, fn) // 遍历子树
      })
    }
    

    比如我们想要把node.title打印出来:

    treeForeach(tree, node => { console.log(node.title) })
    

    小技巧系列 -- 函数作为函数的形参,可以传入函数进行运转

    其中node => { console.log(node.title) } 对应的就是 treeForeach 函数里面的 形参 fn

    再比如我们想把node.title压入数组:

    let arr = []
    treeForeach(tree, node => { 
        arr.push(node.title)
    })
    console.log(arr)
    

    小技巧系列 -- 函数作为函数的形参,可以传入函数进行运转


    起源地下载网 » 小技巧系列 -- 函数作为函数的形参,可以传入函数进行运转

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元