好吧开始读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 }

  

zepto学习之路--数组去重和原生reduce的更多相关文章

  1. zepto学习之路--源代码提取

    最近在看zepto的源代码,把一些有用的函数摘出来,看看zepto是怎么实现的,自己做的时候也可以用.说实话,zepto的实现有一些看起来还是很晦涩的,可能是自己的水平不够,看不透作者的真正的意图. ...

  2. zepto学习之路--核心函数$()的实现

    $()可以说是jquery的精华了,为dom操作带来了极大的灵活和方便.zepto号称“移动版的jquery”,那么它是怎么来实现这个核心函数呢?我们来详细探讨下. 1.首先,我们看下zepto中它是 ...

  3. 小白的java学习之路 “ 数组”

    数组 一.什么是数组: 数组是一个变量,存储相同数据类型的一组数据 声明一个变量就是在内存空间划出一块合适的空间 声明一个数组就是在内存空间划出一串连续的空间 二.数组基本要素: 标识符:数组的名称, ...

  4. reduce计算数组中每个元素出现的次数 数组去重的几种方式 将多维数组转化为一维

    // js计算数组中每个元素出现的次数 // var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice']; // var countedNames = ...

  5. jQuery学习之路(7)- 用原生JavaScript实现jQuery的某些简单功能

    ▓▓▓▓▓▓ 大致介绍 学习了妙味,用原生的JavaScript实现jQuery中的某些部分功能 定义自己的函数库lQuery ▓▓▓▓▓▓ $()选择器的实现 jQuery是面向对象的,所以自己编写 ...

  6. js原生数组去重

    // ['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b']; 取消重复的元素 数组去重 (for循环) // 把旧数组里面 不重复的元素选取出来放到新数组中 重复 ...

  7. JavaScript学习系列博客_28_JavaScript 数组去重

    数组去重 var arr = [1,2,3,2,2,1,3,4,2,5]; //去除数组中重复的数字 //获取数组中的每一个元素 for(var i=0 ; i<arr.length ; i++ ...

  8. [转]Spark学习之路 (三)Spark之RDD

    Spark学习之路 (三)Spark之RDD   https://www.cnblogs.com/qingyunzong/p/8899715.html 目录 一.RDD的概述 1.1 什么是RDD? ...

  9. Qt 学习之路 2(29):绘制设备

    Qt 学习之路 2(29):绘制设备 豆子 2012年12月3日 Qt 学习之路 2 28条评论 绘图设备是继承QPainterDevice的类.QPaintDevice就是能够进行绘制的类,也就是说 ...

随机推荐

  1. Java1.5泛型指南中文版(Java1.5 Generic Tutorial)

    Java1.5泛型指南中文版(Java1.5 Generic Tutorial) 英文版pdf下载链接:http://java.sun.com/j2se/1.5/pdf/generics-tutori ...

  2. 根据字符串获取对应类型(Type) 转

    public static Type GetTypeByString(string type)        {            switch (type.ToLower())          ...

  3. Django: 之用户注册、缓存和静态网页

    Django 用户注册系统 Django 的源码中已经有登录,退出,重设密码等相关的视图函数,在下面这个app中 django.contrib.auth 可以点击对应的版本查看相关源代码:1.9  1 ...

  4. Anaroid WebView详解大全

    资源描述: 1.android提供了webView控件专门用来浏览网页.然后在程序中装载webView控件,设置属性,比如:颜色.字体.要访问的网址等.通过loadUrl方法设置当前webView需要 ...

  5. error: invalid 'asm': invalid operand for code 'w'

    google 出结果 http://stackoverflow.com/questions/15623609/including-curl-into-the-android-aosp ........ ...

  6. Sanatorium

    Sanatorium time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  7. Windows快捷键大全(从XP到win8.1)

    常见用法 F1 显示当前程序或者windows的帮助内容. F2 当你选中一个文件的话,这意味着“重命名” F3 当你在桌面上的时候是打开“查找:所有文件” 对话框 F5 刷新 F10或ALT 激活当 ...

  8. TCPIP header

    tcp packet: tcp header: ip header:

  9. POJ1734/Floyd求最小环

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6647   Accepted: 2538 ...

  10. 配置App真机测试证书的流程 一览

    原文链接:http://www.jianshu.com/p/6b0de0d4c925 有开发者账号的前提下, 请进行如下步骤:1.首先登录网站:https://developer.apple.com. ...