Underscore.js API 学习笔记

Collections

_.first 可以挑选出数组中第一个元素,比[0]更可读

_.reduce可以将整个数组合并成一个数字,第三个参数是初始值,如果没有就采用数组的第一个数字作为初始值
var sum = _.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0);
=> 6

_.reduceRight 是 _.reduce的从右向左版本

查找
  • _.find只能找一个元素
  • _.filter可以过滤多个
  • _.where就像是key-value版本的_.filter,使用频率很高
  • _.findwhere 是key-value版本的_.find
  • _.reject 是_.filter的反向实现

存在
  • _.every 是否每一个都通过
  • _.some 是否个别通过
  • _.contains 是否存在

_.invoke 顺序调用list中的所有对象的方法
_.invoke(list, methodName, *arguments)

_.plunk 是key-value版本的_.map,只需要制定属性名便可以抽出一个单独包含该属性值的数组

排序
  • _.max, _.min可以传入函数,来对对象数组进行比较
  • _.sortBy
  • _.groupBy 根据function计算的结果分组
  • _.indexBy key-value版本的_.groupBy,按照属性来分组
  • _.countBy 只计算数量的_.groupBy
  • _shuffle 随机打算数组
  • _.sample 抽样,可以传入要抽样的数量
  • _.partition 跟 groupBy类似,但是不会留下组名

_.toArray将任何东西转化为数组,如果是对象就把值转化为数组
_.size() 不止可以计算数组的长度,还可以返回对象的属性数量

Array

_.first 第一个    <--->  _.last最后一个
_initial 去除最后n个, 如果不传n就是去除最后一个 <---> rest 去除前n个,不传n就是去除第一个
_.compact 数组中的false, null, 0, "" 会被去除
_.flatten 把数据变成扁平化 但是只对数组有效,对对象无效
_.without 从数组中去除某几个数
_.intersection  交叉,挑选几个数组中的交集

_.object 把二维数组变对象
_.indexOf 可以查找某个字符串或者数字在数组中的位置
_.sortedIndex 如果把这个值放到数组中会在哪个位置  如果是对象需要指定按照哪个属性来排序
_.sortedIndex([10, 20, 30, 40, 50], 35);
=> 3
Function

_.bind 将方法绑定到对象上
_.bindAll 绑多个方法到对象上
_.partial 与设定方法的前几个参数,并生成新的方法
var subtract = function(a, b) { return b - a; };
sub5 = _.partial(subtract, 5);
sub5(20);
=> 15
如果想跳过某几个参数,就用_当占位符
_.memoize 可以把计算的结果缓存起来,如果有传入第二个参数作为hash值计算的方法,那么会按该方法计算的结果作为key来存储计算的结果。可以加速js的计算
_.delay 就是underscore版本的setTimeout
_.defer 就是相当于0毫秒的setTimeout,不要跟jquery的ajax的defer混淆了
_.throttle 为函数调用设定一个时间阀值,当初次调用后的一段时间内,再次调用不会发生效果。
_.debounce 是即时版本的_.delay,当用debounce定义了函数和延迟后,每次调用该函数,都会在指定延时后才执行
_.once 生成之调用一次的函数,使用场景 初始化函数
_.after 生成之后在制定次数的调用之后再调用,前n-1次调用会被直接跳过,使用场景 多个异步请求返回结果后的处理
_.before 生成之后的函数只能调用n次
_.wrap 把第一个参数定义的函数当做参数传给第二个函数,使用场景 做方法的拦截器, 可以在某个方法执行前或者执行后进行指定操作
_.negate 对方法取反,本来返回true的现在变成返回false,其实就相当于在返回值前加 !
_.compose 串联多个方法,前一个方法的返回值作为下一个方法的输入参数

Object

_.keys 拿出对象的所有属性名,比用for来遍历所有var更好的是该方法不需要判断是否属于对象本身
_.allKeys 拿出对象的所有属性名包括继承的对象的属性
_.values 拿出对象的所有值
_.mapObject 对对象内的所有属性进行计算
_.pairs 把对象的属性转换为数组,最后变为一个二维数组
_.pairs({one: 1, two: 2, three: 3});
=> [["one", 1], ["two", 2], ["three", 3]]
_.functions 返回对象的所有方法名,放在一个数组中
_.extend 继承,但是只对所有属性进行浅拷贝
_.extendOwn 之继承自己的属性
_.pick 抓取
_.omit 相当于删除, 但不改变对象本身的属性
_.defaults 设置默认属性,如果对象已经存在该属性则不改变
_.clone 浅拷贝
_.tap 跟_.chain 联合作用,可以在一连串操作中插入某个操作
_.property 获取某个属性 跟pick很类似,只是写法更简单,相当于pick的简化版
var stooge = {name: 'moe'};
'moe' === _.property('name')(stooge);
=> true
_.propertyOf(object) 是 _.property的反向方式作用一样
_.matcher 跟 _.filter配合使用,_.matcher先生成一个函数,然后当做第二个参数传给 _.filter 相当于一个对象属性比较的简化版 filter函数
_.isEqual 可以用来比较两个类里面的属性是否相等
_.isMatch 比较是否部分属性符合条件
_.isEmpty 对象或者序列是否是空的
_.isElement 对象是否是一个DOM对象
_.isArray 是否是一个数组
_.isObject 是否是一个对象
_.isNaN 有别于原生的isNaN方法,只有真正的NaN才返回true,原生方法连undefined都返回true

Utility 工具方法

_.noConflict() 返回underscore的别名
_.identity(value) 判断两个函数传入的参数是一样的
var stooge = {name: 'moe'};
stooge === _.identity(stooge);
=> true
 _.constant(value) 创建一个函数,这个函数永远返回value
_.random(min, max) 创建随机数
_.mixin 可以在underscore里面加入你自定义的函数
_.uniqueId(pre) 创建独立id
_.unescape() 把 html 代码 转义出来,比如 &amp; 变成 &
_.result(object. prop, [defaultValue]) 手动调用object中的函数或者返回object中的属性,取决于prop是属性还是函数。如果prop找不到就返回 defaultValue
_.now 返回到当前时间戳
_.template(templateString, [settings]) 这是一个最简单的模板组件,
var compiled = _.template("hello: <%= name %>");
compiled({name: 'moe'});
=> "hello: moe"

var template = _.template("<b><%- value %></b>");
template({value: '<script>'});
=> "<b>&lt;script&gt;</b>"
<%= name %> 作为占位符
如果你想把传入的属性顺便转义成html代码,就用  <%- name %>
也可以用 <% print(...) %>
还可以通过 _.templateSettings.interpolate 修改占位符

Object-Oriented Style

可以换一种方式调用_
比如 _.map()  可以写成 _(...).map(function(){...})

Chaining
链式调用。记得最后用.value来获取最终的返回值

_.chain(lyrics)
  .map(function(line) { return line.words.split(' '); })
  .flatten()
  .reduce(function(counts, word) {
    counts[word] = (counts[word] || 0) + 1;
    return counts;
  }, {})
  .value();







猜你喜欢

转载自blog.csdn.net/nsrainbow/article/details/75195703
今日推荐