JavaScript中的undersocre

2021-07-05  本文已影响0人  鱿鱼炸酱面

JavaScript中第三方库underscore提供了一套完善的函数式编程的接口,与jQuery类似,它会把自身绑定到唯一的全局变量_上,这也是为何它的名字叫underscore.
比如,underscore的map()可以作用与Array和Object:

_.map([1, 2, 3], (x) => x * x); // [1, 4, 9]
_.map({ a: 1, b: 2, c: 3 }, (v, k) => k + '=' + v); // ['a=1', 'b=2', 'c=3']

1.Collections

对集合类对象提供的接口,仅支持Array和Object,不支持Map和Set

map/mapObject  //返回映射/对象映射后的集合类对象,传入callback
filter  //返回过滤后的集合类对象,传入callback
every / some  //返回是否所有元素的布尔值/返回是否有>1个元素符合的布尔值,传入callback
max / min  //返回最大值/最小值
groupBy  // 返回分组后的集合类对象,传入callback
shuffle / sample  // 返回打乱顺序后集合类对象/返回随机取指定个数元素的集合类对象

2.Arrays

对array提供的函数

first / last  //取array的第一个值和最后一个值
flatten  //将多维array展开为一维
zip / unzip  //将两个array压缩成二维列表/unzip相反
object  //类似zip,但将两个array转为object
range  // 类似python,快速生成一个array

3.Functions

对函数提供的函数

bind(object.function, object)  // 返回一个新的函数,该函数可以调用原对象的函数功能,传入一个对象的函数和对象本身,
partial  // 返回一个固定了某个参数的新函数,称为偏函数,用法与python一致
memoize   //返回一个新函数,该函数可以实现缓存原函数之前相同的调用结果
once  // 返回一个新函数,该函数可以保证某个函数执行且仅执行一次
delay  // 可以让一个函数延迟执行,效果和setTimeout()一样

4.Objects

针对Object的功能接口

keys / allKeys  //返回对象的key的array,包含/不包含原型链继承的key
values  //返回对象不包含原型链的value的array
mapObject  //针对对象的map方法
invert  //交换key和value
extend / extendOwn  // 将多个对象合为一个, extendOwn不包含原型链继承的
clone  //浅拷贝一个对象
isEqual  //返回布尔值,对两个对象进行深度比较

Chaining

Chaining是指链式调用
underscore提供了把对象包装成能进行链式调用的方法,就是chain()函数:

var r = _.chain([1, 4, 9, 16, 25])
         .map(Math.sqrt)
         .filter(x => x % 2 === 1)
         .value();
console.log(r); // [1, 3, 5]

因为每一步返回的都是包装对象,所以最后一步的结果需要调用value()获得最终结果。

上一篇下一篇

猜你喜欢

热点阅读