underscore 下划线

underscore提供了一套完善的函数式编程的接口.underscore在加载时,会把自身绑定到唯一的全局变量_上,类似jquery把自身绑定到$上一样.这也是名字叫underscore的原因.

collections 数据集合

collections包括数组,对象,类数组等数据格式.

  1. each
    _.each(list, iteratee, [context]) Alias: forEach
    用函数iteratee对数组list中的每个元素进行处理
var arr= [1,2,3,4]
_each(arr, function(v, i, arr) {console.log(v)  //元素console.log(i)  //索引console.log(arr) // 被遍历的数组arr
})
  1. map
    _.map(list, iteratee, [context]) Alias: collect
    对list里的每一个元素用iteratee进行处理,并生成一个对应的数组.
    生成的数组里的元素是iteratee中return来的

  2. reduce
    _.reduce(list, iteratee, [memo], [context]) Aliases: inject,foldl
    将整个数据集合,合并为一个返回

  3. reduceRight
    从右侧开始组合元素处理的reduce函数

  4. find
    _.find(list, predicate, [context]) Alias: detect
    查找一个.在list里查找一个符合条件的元素,找到了整个函数结束.返回符合条件的值.

  5. filter
    _.filter(list, predicate, [context]) Alias: select
    过滤, 返回所有符合判断的值

  6. where
    _.where(list, properties)
    遍历list,返回一个数组.里面的元素是包含properties属性集合的元素

  7. findWhere
    _.findWhere(list, properties)
    返回第一个包含properties的元素

  8. reject
    _.reject(list, predicate, [context])
    把通过判断的拒绝,返回没有通过判断的集合.与filter相反

  9. every
    _.every(list, [predicate], [context]) Alias:all
    每一个,如果list里的所有元素都通过predicate的判断就返回true.否则返回false.类似 && 并且

  10. some
    _some(list, [predicate], [context]) Alias: any
    任何一个,任何一个元素通过了判断就返回true.类似||或者

  11. contains
    _.contains(list, value, [formIndex]) Alias: includes(包含)
    只要包含元素就返回true.从formIndex开始判断

  12. groupBy
    _.groupBy(list, iteratee, [context])
    分组,把集合的元素按照iteratee的返回值归类,函数的返回值是一个对象,对象的属性名是iteratee的返回值.属性值是数组,数组里是符合iteratee的元素
var scores = [1, 2, 3, 4, 5]
var groups = _.groupBy(scores, function(v) {if (x > 4) { return "A"} else if ( x < 2) { return "B"}else  { return "C"}
})
/*groups输出
{A: [5],B: [1]C: [2, 3, 4]
}*/ 
  1. shuffle
    _.shuffle(list)
    洗牌, 返回一个随机乱序的list副本

  2. sample
    _.sample(list, [n])
    随机抽取,从list中返回n随机样本,n不传返回一个

Arrays 数组

专门针对数组的方法,也可以用于arguments(参数对象)
在数组方法中可选参数(n, index)默认都是1

  1. first/last

    _.first(array, [n])
    返回array的前n个元素

    _.last(array, [n])
    从array后面开始返回前n个元素

  2. flatten 扁平化

    _.flatten(array, [shallow])
    将多维数组,拉开成一维数组

  3. range 范围

    _range([start], stop, [step])
    生成一个整数零活编号的数组.便于each和map循环. start: 开始数字,默认为0,
    stop: 结束数字(取不到). step: 步进, 默认为1.

    _.range(4) //[0, 1, 2, 3,]
    _.range(0, -10, -3)     //[0, -3, -6, -9]

Function 函数

  1. bind 绑定

    _.bind(function, object, arguments)
    将function中的this的指向修改为object.
    arguments是任意可选参数,可以传递给function

    var s = "hello"
    s.trim()        //输出"hello"var fn = s.trim
    fn()            //报错,TypeError.原因是s.trim函数中的this指向是s(String字符串对象).而fn中的this指向是window(全局对象).fn.call(s)      //输出"hello", 用function.call把this的指向改成了s.但是这样调用很麻烦,每次都要写fn.call(s)var fn1 = _.bind(s.trim, s)
    fn1()           //输出'hello',fn1函数中的this被bind函数改成了s
    
  2. memoize 缓存

    _.memoize(function, [hashFunction])
    缓存某函数的计算结果.对于耗时较长的计算很有帮助,比如字符串拼接,计算阶乘等.

    var func = _.memoize(function(n) {var s = 1, i = nwhile(i > 1) {s = s * ii--}console.log(s)return s})func(10)    // 函数返回3628800,控制台输出 3628800func(10)    //函数返回 3628800,控制台没有输出,代表函数并没有执行.如果第二次函数的参数不同还是会再次计算的
  1. once 一次

    _.once(function)
    返回的函数只能执行一次,重复调用没有效果.可以用来做初始化函数,不用再设一个boolean来检查是否初始化完成.

Object 对象

专门针对Object的函数

  1. keys/allKeys

    _.keys(object)
    返回object拥有的所有的属性名,不包括继承来的

    _.keys({one: 1, two: 2, three:3})   //["one", "two", "three"]

    _.allKeys(object)
    返回object拥有的和继承的所有的属性名

  2. values

    _.value(object)
    与keys类似,返回的是对象的所有的属性值的数组

  3. mapObject

    .mapObject(object, iteratee, [context])
    类似于map,但是作用于对象,返回值也是对象,转换每个属性的值.
    .map的返回值是数组

  4. extend 延伸,扩展

    _.extend(destination, *soruces)
    复制source对象中的所有的属性覆盖到destination对象上,并把destination返回.复制是按顺序的,后面对象的属性会把前面对象的属性覆盖
    _.extend({name: "lifei"}, {age: 50}) //{name: "lifei", age: 50}

  5. clone 克隆

    _.clone(object)
    浅拷贝

  6. isEqual 是否相同

    _isEqual(object, other)
    深度比较两个对象的属性是否相同.

Utility 其他实用功能

  1. uniqueId 全局Id

    _.uniqueId([prefix])
    生成客户端全局唯一的Id,prefix是前缀

  2. template 模板

    _.template(templateString, [settings])
    模板函数,使用 <%= %> 插入变量,执行任意的js代码.会返回一个模板函数,执行这个模板函数,把变量作为参数传进去.就能生成最终的字符串. 没有ES6的模板字符串好用
    var compiled = _.template('hello: <%= name %>') compiled({name: moe}) // "hello: moe"

注意

  1. iteratee: [ˈɪtəreɪt]迭代,一个函数,参数是数组中的中的元素,索引

  2. context: 环境,上下文,就是指this的指向.比如each的iteratee中,
    如果没有context, 那么this指的是window. 如果有context,比如{a: 1}.那么this指的是{a: 1}这个对象
var arr = [1, 2, 3]
var obj = {a: 1}
_.each(arr, function(v) {console.log(this)   //this是window
})
_.each(arr, function(v) {console.log(this)   //this是obj这个对象
}, obj)
  1. Alias: [ˈeɪliəs] 别名

  2. collections 集合,包括数组,对象,类数组对象

  3. reduce: 减少

  4. inject: 注入

  5. memo: [ˈmeməʊ] 备忘录,初始值.集合中的数据相互作用时,作为初始值. _.reduce(list, iteratee, [memo], [context])函数是把list里面的前一项拿出来和后一项进行处理(比如相加),memo作为原始值和list里的第一项一起处理.得到的结果作为第二次迭代的memo和list里的第二个元素进行处理

  6. predicate: [ˈpredɪkət] 断言,判断.是一个函数list里的元素作为参数传进去,根据一定逻辑进行判断,return返回的不是元素,而是一个boolean值.代表元素是否通过了判断

  7. properties: property属性的复数形式.表示属性集合.一般用对象来表示.比如:{a: 1, b: 2}

  8. 有find的方法,一般是返回第一个符合条件的值

  9. isXXX方法.is开否的方法,一般是判断是否符合条件.返回boolean

  10. reject: 拒绝

  11. formIndex: 索引,表示函数开始的索引.如果元素集合是数组.那么就从这个索引开始执行函数

  12. flatten: [ˈflætn] 扁平化
    把多维数组,拆散,拉开,拍平成一维数组

  13. shallow: [ˈʃæləʊ] 浅的
    一般是boolean值,默认为false. 如果shallow为true,针对flatten扁平化的话,就是只减少一维的数组.如果是复制对象的话,就是浅复制.

  14. memorize: [ˈmeməraɪz] 记忆,缓存

  15. unique: [juˈni:k] 独特的, uniqueId第一无二的Id

  16. prefix: [ˈpri:fɪks] 前缀

转载于:https://www.cnblogs.com/bridge7839/p/7803785.html

underscore相关推荐

  1. 打造属于自己的underscore系列 ( 一 )

    underscore作为开发中比较常用的一个javascript工具库,提供了一套丰富的函数式编程功能,该库并没有拓展原有的javascript原生对象,而是在自定义的_对象上,提供了100多个方法函 ...

  2. 打造属于自己的underscore系列(五)- 偏函数和函数柯里化

    这一节的内容,主要针对javascript函数式编程的两个重要概念,偏函数(partial application) 和函数柯里化(curry)进行介绍.着重讲解underscore中对于偏函数应用的 ...

  3. Underscore _.template 方法使用详解

    为什么80%的码农都做不了架构师?>>>    https://github.com/hanzichi/underscore-analysis/issues/26 前文 浅谈 Web ...

  4. Underscore实例教程

    摘要: Underscore是一个轻量级的JavaScript库,提供了许多非常实用的函数.熟练使用Underscore可以更快地写出更简洁的代码.本文将通过一个简单的编程实例,介绍几个常用的Unde ...

  5. 【跟着子迟品 underscore】Array Functions 相关源码拾遗 小结

    Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...

  6. 理解Underscore中的uniq函数

    uniq函数,是Underscore中的一个数组去重函数,给它传递一个数组,它将会返回该数组的去重副本. 1 ES6版本去重 在ES6版本中,引入了一个新的数据结构--set,这是一种类似数组的数据结 ...

  7. 浅谈 underscore 内部方法 group 的设计原理

    前言 真是天一热什么事都不想干,这个月只产出了一篇文章,赶紧写一篇压压惊! 前文(https://github.com/hanzichi/underscore-analysis/issues/15)说 ...

  8. underscore:get elements counts of a array

    2019独角兽企业重金招聘Python工程师标准>>> get elements counts of a array by underscore source code: funct ...

  9. underscore.js源码解析2

    _.isNull(object) 如果object的值是null,返回true. _.isNull(null); => true; _.isNull(undefined); => fals ...

最新文章

  1. [react] 请说说你对react的render方法的理解
  2. 博客地址 RSS地址
  3. 前后端分离重复提交_阿里一面:如何保证API接口数据安全?
  4. LV也开启了直播首秀,一个小时吸引超1.5万人观看
  5. 洗点,现金1100G
  6. 再接再厉!Alphabet将携手更多汽车厂商测试无人驾驶
  7. Tricks(十八)—— 转置 list of lists
  8. Matlab中的逻辑运算:“any”,“all”
  9. 销售自用计算机损益计入哪里,用友创业者4.0下的ERP沙盘模拟经营规则中,销售所需紧急采购产品时,按成品直接成本的(    )倍直接扣除现金,付款即到货,紧急采购多付出的成本计入费用表损失项。...
  10. 英:英语面试常用口语900句
  11. DAX——FILTER
  12. 知乎客户端跨平台 Hybrid 调试实战
  13. app推广假量怎么识别?
  14. Linux 管理面板云帮手、APPNODE与宝塔哪个好
  15. oracle基本命令
  16. 【提前批】【第二批】CUHK CSE 面经2022.6.17
  17. Proftpd配置文件
  18. python在abaqus中的应用光盘文件下载_python语言在abaqus中的应用随书光盘.rar-讲义文档类资源...
  19. 最近失业了,在做副业的路上走了很多坑
  20. 华盛顿大学西雅图分校计算机专业排名,2020年华盛顿大学西雅图分校世界排名...

热门文章

  1. netty 对 protobuf 协议的解码与包装探究(2)
  2. 转移操作主机角色至Windows Server 2012 R2
  3. 用iptable简单的给web服务器做安全
  4. .NET中防止Access数据库下载
  5. java 扩展类加载器_java实现自定义类加载器
  6. java线程安全性_Java并发-线程安全性
  7. 多通道接收机幅相校准测试系统的设计
  8. FPGA中block ram和distributed ram的区别
  9. C++ 中 string earse 函数的使用
  10. opencv-python图像处理之磨皮相机