参考文档 http://www.css88.com/doc/underscore/
Collection
map 类似Array.map 但是返回的是对象
filter 返回数组,对于nodeList 返回的是document 节点
every 返回boolean 迭代的列表每个都是true才会返回 true
some 返回boolean 迭代的列表有一个为true 就返回true
min 返回最小值 如果是对象的话 第二个参数可以属性名,只是比较这个属性
max 返回最大值 类似min
groupBy(list, iteratee) eg:
_.groupBy([1.3, 2.1, 2.4], function(num){ return Math.floor(num); });
=> {1: [1.3], 2: [2.1, 2.4]}
shuffle 打乱一个集合
sample(list,[n]) 随机返回n个元素
Array
first(list,[n]) 获取数组的第一个元素,可选参数n 表示返回数组的前n个元素
last(list, [n]) 获取数组的最后一个元素, 可选参数n表示返回数组的最后n个元素
flatten(list, [shallow]) 将多维数组转成一维数组 , shallow=true 只是减少一个维度
zip(*array) 将多维数组对应的index合并到一起
unzip(array) 和zip相反
object(list ,[values]) 将数组转成对象(和zip相比, 将第一个数组的value转成了对象的index) 俩种用法 a. [index, value] 转成{index:value} b. [a,,b], [c,d] {a:c, b:d}
range([start],stop, [step]) 根据范围创建数组,包含指定的元素 类似与php 区别在于 a. underscore不支持 _.range("a","c") b. underscore 不包含stop php 包含
Function
bind(function, object) 一个变量fn如果执行了一个对象s的方法时 会丢失对this的引用 fn()这样调用是不行的 bind的第二个参数 可以绑定this为对象s
(当然变量绑定的是不是对象的方法的时候, 是可以fn())
partial(function, *arguments) 一个函数多个参数的话 可以使用这个方法固定常用的参数 参数的占位符是'_' eg:var powN3 = _.partial(Math.pow, _, 3); // x^3
memoize(function) 缓存函数的计算信息,当参数不同的时候 会重新调用
once(function) 某个函数无论如何都是只是调用一次
delay(function, waittime, *arguments) 延迟执行一个函数
Object
keys(object) 获取对象属性名称, 返回数组
allkeys(object) 除了返回自身的key 也返回继承的key
values(object) 返回数组,包含所有自身的values 不存在函数allValues
mapObecjt (object,iteratee) 返回数组, 迭代对象的每个元素
invert(object) 对象反转 (key和value交换)
extend(destination, *source) 将多个对象合并,属性相同,后面的优先级大
extendOwn(destination, *source) 只是合并本身的属性
clone(object) 返回浅层copy的对象 两者属性指向同一地址空间,(string Number null undefine boolean 属于不可以修改的数据类型, 只会被赋值) 在属性被修改的
两者都会变化
isEqual(object,other) 深层比较两个对象是不是相等
var stooge = {name: 'moe', luckyNumbers: [13, 27, 34]}; var clone = {name: 'moe', luckyNumbers: [13, 27, 34]}; stooge == clone; => false _.isEqual(stooge, clone); => true