underscore 常用的方法

参考文档      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

你可能感兴趣的:(web)