underscore
类似于jQuery用$
代替,underscore用_
代替
Collections
collctions指array和object
map/filter
用于array:
_.map(arr,x=>(???))
用于object:
_.mapObject(obj,(key,value)=>(???))
filter同理
every/some
every
:当所有元素都符合要求(都返回true)时,返回true;
some
:当有一个元素符合要求时,返回true。
min/max
返回最小值/最大值,对于obj,只比较value。
groupBy
把元素归类,对于obj,按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
shuffle
:随机打乱元素,对于obj,按key打乱
sample
:随机取样,对于obj,按key取样
Arrays
针对array的一些操作
first/last
返回数组第一/最后一个元素
flatten
将数组展平为一维数组
zip/unzip
var names = ['Adam', 'Lisa', 'Bart'];
var scores = [85, 92, 59];
_.zip(names, scores);
// [['Adam', 85], ['Lisa', 92], ['Bart', 59]]
unzip()
则是反过来:
var namesAndScores = [['Adam', 85], ['Lisa', 92], ['Bart', 59]];
_.unzip(namesAndScores);
// [['Adam', 'Lisa', 'Bart'], [85, 92, 59]]
object
和zip差不多,但结果为object
var names = ['Adam', 'Lisa', 'Bart'];
var scores = [85, 92, 59];
_.object(names, scores);
// {Adam: 85, Lisa: 92, Bart: 59}
range
生成一个序列,类似于python中的range()
Functions
主要用于funcion对象
bind
主要用于将函数中的this参数与某个对象绑定(不然一般this会指向window全局对象)
var s = ' Hello ';
var fn = _.bind(s.trim, s);
fn();
// 输出Hello
memorize
记住输入某个参数时相应的输出,第二次调用时就不用计算,直接返回结果。
once
令函数只调用一次,即用过一次后,再次调用也会没有效果。
delay
让函数延迟执行
// 2秒后调用alert():
_.delay(alert, 2000);
若有参数,将所有参数放在时间参数后面
var log = _.bind(console.log, console);
_.delay(log, 2000, 'Hello,', 'world!');
// 2秒后打印'Hello, world!':
Objects
针对object的一些操作
keys()
:返回所有key
values()
:返回所有value
invert()
:将key与value交换,即(key,value)变成(value,key)
extend({},obj1,obj2,...)
:将所有obj合并,若key相同,后面的obj覆盖前面的obj
clone()
:克隆obj,注意,克隆后不同对象的同一个key指向同一个value,也就是修改一个对象的value,另外一个对象的value也会被修改
isEqual()
:判断obj的(key,value)是否一一相等
Chainning
允许使用链式调用
var r = _.chain([1, 4, 9, 16, 25])
.map(Math.sqrt)
.filter(x => x % 2 === 1)
.value();
因为每一步返回的都是包装对象,所以最后一步的结果需要调用value()
获得最终结果。