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   }

  

时间: 2024-10-12 02:24:29

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

php学习之路----数组,多维数组,数组函数

php数组 数组基本写作格式: 1:简单形式 Array("aa",12,true,2.2," test",50); 2:完整形式 Array("title"=>"aa","age"=>20);这种格式为数组创建了键名,如果创建了键名,就不能通过下标0,1,2...来访问数组元素 了. 3:$arr[0]='20'; $arr[1]='hello world'; 数组的创建,修改,删除,使用 修

PHP学习之路——数组篇

数组:PHP有两种数组:索引数组和关联数组,索引和关联两个词都是针对数组的键而言的. 1.数组的定义:$arr = array();表示创建一个空数组,并把创建的数组赋值给变量$arr. 2.索引数组:索引数组是指数组的键是整数的数组,并且键的整数顺序是从0开始,一次类推.例:$fruit  = array(""苹果","香蕉","菠萝");(注:数组的键是从0开始的,可以使用print_r($fruit);语句输出数组键及对应的值).

Android的学习之路(二)项目中原生文件的使用场景和文件介绍

1.src文件:java源代码存放目录 2.gen 文件:自动生成所有由android开发工具自动生成的文件,目录中最重要的就是R.java文件,这个文件由android开 发工具自动产生的.android开发工具会自动根据你存放res目录的资源,同步更新修稿R.java文件,正因为 R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java.R.java文件在应用中起到了字典的作 用,它包含了各种资源的ID,通过R.java,应用可以很方便的找到对应资源, 2.1R.java 

原生JS数组去重的几种方法

有时候我们做项目的时候往往会需要把数组里面一些重复的项去掉,但是原生JS有排序,有筛选等等,但是就是没有数组去重怎么办呢?这能怎么办,自己手动实现嘛.(以下代码直接在原型上添加的的方法,为的就是和原生JS方法类似)可以达到Array.xxx()这样的效果 第一种方法:创建空数组利用indexOf方法检测就数组的项是否在新数组中. Array.prototype.unique=function(){ var arr=[];//创建新数组 for(var i=0;i<this.length;i++)

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var

[前端小小白的学习之路]--PHP数组

今天学习了PHP数组,整理下相关知识点. PHP数组是什么? php数组是一个能在单个变量中存储多个值的特殊变量. 如:你有一个项目清单(人名清单),将其存储到单个变量中,如下: $name1 = '张三'; $name2 = '李四'; $name3 = '王五'; $name4 = '赵六';.... 如果这个清单里面有上百号人名,你要从中找到指定的某一个这样会有点麻烦了. 解决这个问题的办法就是创建一个数组. 数组可以在单个变量中存储多个值,并且您可以根据键访问其中的值. 在 PHP 中,

后端开发者的Vue学习之路(二)

目录 上篇内容回顾: 数据绑定 表单输入框绑定 单行文本输入框 多行文本输入框 复选框checkbox 单选框radio 选择框select 数据绑定的修饰符 .lazy .number .trim 样式绑定 class绑定 对象语法: 数组语法: style绑定 对象语法: 数组语法: 补充: 事件 绑定事件 事件修饰符 按键修饰符 事件绑定的简写 补充: Vue指令 数组操作 官网的话 补充: Vue的元素复用问题 数据残留问题 问题的解决: 首发日期:2019-01-20 上篇内容回顾:

JavaScript 数组去重

JavaScript 数组去重 Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对话,你会学到很多.为什么是 underscore?最主要的原因是 underscore 简短精悍(约 1.5k 行),封装了 100 多个有用的方法,耦合度低,非常适合逐个方法阅读,适合楼主这样的 JavaScript

面试题:数组去重

题目:数组去重,最常见的题型 五种算法来实现这个目的: Array.prototype.unique1 = function(){ var r = new Array(); label: for (var i = 0; i < this.length; i++) { for (var j = 0; j < r.length; j++) { if(r[j] == this[i]){ continue label; } }; r[r.length] = this[i]; }; return r;