• underscore


    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 = n
    		while(i > 1) {
    			s = s * i
    			i--
    		}
    		console.log(s)
    		return s
    	})
    	func(10) 	// 函数返回3628800,控制台输出 3628800
    
    	func(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拥有的和继承的所有的属性名

    1. values

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

    2. mapObject

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

    3. extend 延伸,扩展

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

      _.extend({name: "lifei"}, {age: 50}) 	//{name: "lifei", age: 50}
      
    4. clone 克隆

      _.clone(object)
      浅拷贝

    5. 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] 前缀

  • 相关阅读:
    4-1 R语言函数 lapply
    3-6 向量化操作
    3-5 处理缺失值
    3-4 列表的子集
    3-3 数据框的子集
    3-2 矩阵的子集
    bootstrap 模式对话框
    手机端 超链接 识别电话号码
    jQuery设置和获取HTML、文本和值
    TP 框架 ajax[利用异步提交表单]
  • 原文地址:https://www.cnblogs.com/bridge7839/p/7803785.html
Copyright © 2020-2023  润新知