underscore


正如jQuery统一了不同浏览器之间的DOM操作的差异,让我们可以简单地对DOM进行操作,underscore则提供了一套完善的函数式编程的接口,让我们更方便地在JavaScript中实现函数式编程
jQuery在加载时,会把自身绑定到唯一的全局变量$上,underscore与其类似,会把自身绑定到唯一的全局变量_上

map/filter

和Array的map()与filter()类似,但是underscore的map()和filter()可以作用于Object。
当作用于Object时,传入的函数为function (value, key),第一个参数接收value,第二个参数接收key;
但是,最后的返回值会是一个数组:
var obj = {
name: 'bob',
school: 'No.1 middle school',
address: 'xueyuan road'
};
var upper = _.map(obj, function (value, key) {
return value+"-"+key;
});
console.log(JSON.stringify(upper));

//["bob-name","No.1 middle school-school","xueyuan road-address"]

所以,underscore还提供了mapObject方法,它返回的是一个对象:
var upper = _.mapObject(obj, function (value, key) {
return value+"-"+key;
});
console.log(JSON.stringify(upper));
//{"name":"bob-name","school":"No.1 middle school-school","address":"xueyuan road-address"}


every / some(当所有元素都满足条件时,返回true/当至少有一个元素满足条件时返回true)

_.every([1, 4, 7, -3, -9], (x) => x > 0); // false

_.some([1, 4, 7, -3, -9], (x) => x > 0); // true


max / min 返回集合中的最大值和最小值

 

groupBy()把集合的元素按照key归类,key由传入的函数返回:
var scores = [20, 81, 75, 40, 91, 59, 77, 66, 72, 88, 99];
var groups = _.groupBy(scores, function (x) {
if (x < 60) {
return 'C';
} else if (x < 80) {
return 'B';
} else {
return 'A';
}
});
// 结果:
// {
// A: [81, 91, 88, 99],
// B: [75, 77, 66, 72],
// C: [20, 40, 59]
// }

shuffle //随机打乱一个集合
sample(arr,num) //从arr中随机选出num个元素


为Arrays提供的一些方法

first / last 取出第一个和最后一个元素
flatten 接收一个数组,无论它包含了几个数组,最后转换为一个一维数组
zip / unzip zip方法可以讲两个数组按照索引进行合并,unzip反之
range (0, -10, -1) // [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] 快速生成一个序列


Object

keys / allKeys
keys返回自身所有的key,allKeys返回自身以及原型上所有key

values
返回自身所有的值

mapObject
mapObject()就是针对object的map版本:
var obj = { a: 1, b: 2, c: 3 };
// 注意传入的函数签名,value在前,key在后:
_.mapObject(obj, (v, k) => 100 + v); // { a: 101, b: 102, c: 103 }


invert
key:value => value:key


extend / extendOwn
extend()把多个object的key-value合并到第一个object并返回
如果有相同的key,后面的object的value将覆盖前面的object的value。
extendOwn()和extend()类似,但获取属性时忽略从原型链继承下来的属性。

clone
复制一个对象

isEqual
对两个对象进行内容比较


Chaining
将对象包装成可以链式调用

posted @ 2019-11-10 16:45  淡薄幽清  阅读(20)  评论(0)    收藏  举报