JavaScript学习-underscore
underscore则提供了一套完善的函数式编程的接口,让我们更方便地在
JavaScript中实现函数式编程。
jQuery在加载时,会把自身绑定到唯一的全局变量 $ 上,underscore与其类似,
会把自身绑定到唯一的全局变量 _ 上,这也是为啥它的名字叫underscore的原
因。
collections
underscore为集合类对象提供了一致的接口。集合类是指Array和Object,暂不支持Map和Set。
-
map/filter
underscore的 map() 和 filter() 可以作用于Object。当作用于Object时,传入的函数
为 function (value, key) ,第一个参数接收value,第二个参数接收key:
image.png -
every/some
当集合的所有元素都满足条件时, _.every() 函数返回 true ,当集合的至少一
个元素满足条件时, _.some() 函数返回 true :
image.png
集合为object时:
image.png -
max/min
这两个函数直接返回集合中最大和最小的数:
image.png
集合为object时,max()和min()只作用于value,忽略掉key:
image.png -
groupBy
把集合的元素按照key归类,key由传入的函数返回:
image.png -
shuffle/sample
shuffle()用洗牌算法随机打乱一个集合:
image.png
sample()则是随机选择一个或多个元素:
image.png
Arrays,针对数组的函数
-
first/last
这两个函数分别取第一个和最后一个元素
image.png -
flatten
flatten()接收一个Array,无论这个Array里面嵌套了多少个Array,flatten()最后都把它们变成一个一维数组:
image.png -
zip/unzip
zip()把两个或多个数组的所有元素按索引对齐,然后按索引合并成新数组:
image.png
unzip()则反过来:
image.png -
object
image.png -
range
快速生成一个序列,不再需要用for循环实现
image.png
objects,针对对象的函数
-
keys/allKeys
keys()可以非常方便地返回一个object自身所有的key,但是不包含从原型链继承下来的:
image.png
allKeys()除了object自身的key,还包含从原型继承下来的:
image.png -
values
返回object自身但不包含原型链继承的所有值
image.png -
mapObject
image.png -
invert
invert()把object的每个key-value交换位置,key变为value,value变成key:
image.png -
extend
extend()把多个object的key-value合并到第一个object并返回,如果有相同的key,后面的object的value将覆盖前面的object的value:
image.png -
clone
复制一个object对象,将原有对象的所有属性都复制到新的对象中,clone()为‘浅复制’,两个对象相同的key所引用的value其实是同一个对象:
image.png -
isEqual
isEqual()对两个object进行深度比较,如果内容完全相同,则返回true:
image.png
isEqual()也可以对Array进行比较:
image.png