zoukankan      html  css  js  c++  java
  • zepto学习之路--数组去重和原生reduce

      好吧开始读zepto的源代码,最前面给处理trim和reduce的原生实现,感觉写的很紧凑,其中reduce写的有点晦涩,个人感觉还不错。主要zepto的作者是无分号党,看起了有点不习惯。

      3  if (String.prototype.trim === undefined) // fix for iOS 3.2
       4   String.prototype.trim = function() {
       5     return this.replace(/^s+|s+$/g, '')//类似php的trim函数
       6   }
       7 
       8   // For iOS 3.x
       9   // from https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce
      10   //这个方法的作用就是累似一个累计处理的作用,将前一条数据的处理结果用作下一次的处理
      11   //比如[1,2,3,4,].reduce(function(x,y){ return x+y}); ==> ((1+2)+3)+4,
      12 
      13   if (Array.prototype.reduce === undefined) Array.prototype.reduce = function(fun) {
      14     if (this === void 0 || this === null) throw new TypeError()
      15     var t = Object(this),//t就是数组自己this的拷贝
      16       len = t.length >>> 0,//数组长度
      17       k = 0,//数组下标变量
      18       accumulator//存放结果的变量
      19     if (typeof fun != 'function') throw new TypeError()
      20     if (len == 0 && arguments.length == 1) throw new TypeError()
      21     //取初始值  
      22     if (arguments.length >= 2) accumulator = arguments[1] //如果参数长度大于2个,则将第二个参数作为初始值
      23     else do {
      24       if (k in t) {
      25         accumulator = t[k++] //否则将数组的第一条数据作为初绍值
      26         break
      27       }
      28       if (++k >= len) throw new TypeError() //什么情况下会执行到这里来???
      29     } while (true)
      30     //遍历数组,将前一次的结果传入处理函数进行累计处理
      31     while (k < len) {
      32       if (k in t) accumulator = fun.call(undefined, accumulator, t[k], k, t)//核心运算代码
      33       k++
      34     }
      35     return accumulator
      36   }
    

      

  • 相关阅读:
    YApi 部署记录
    《Go语言网络编程》第一章:体系
    Golang知识图谱
    Docker学习笔记之二:制作镜像并PUSH
    下载m3u8视频
    杂知识
    遗传算法
    评分卡
    小数据玩转Pyspark(2)
    从Word Embedding到Bert模型—自然语言处理中的预训练技术发展史(转载)
  • 原文地址:https://www.cnblogs.com/dunken/p/4396205.html
Copyright © 2011-2022 走看看