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   }
    

      

  • 相关阅读:
    root用户没有权限编辑其他用户处理
    php中 被遗忘的函数
    erlang file操作(IO编程)
    Linux下的MySQL自动备份脚本
    这就是传说中让理科生沉默,让文科生落泪的文理综合体(转)
    LINUX 忘记root密码
    php中 被遗忘的函数
    分页显示的常用操作方法
    php 接口类:interface
    php垃圾回收机制分析
  • 原文地址:https://www.cnblogs.com/dunken/p/4396205.html
Copyright © 2011-2022 走看看