JavaScript之underscore

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()获得最终结果。

猜你喜欢

转载自blog.csdn.net/a13602955218/article/details/84797243