lodash摘要


1.forEach=each ,forEachRight

 _.forEach(collection, function(name, index) {
       if (name === 'Kelly') {
           console.log('Kelly Index: ' + index);
           return false;//退出循环
       }
   });

2.

sortBy(collection,sortFunc) 

sortBy(collection,field);//根据对象的某个属性排序

[{name:"sakop",name:"leah"}] 

sortBy(string).join(); //bac -> abc //string排序出来是一个字符数组,需要join回去


3.给一个有序的数组插入一个元素

["ewqe","re","zds"]插入一个元素pse,这时候需要通过sortIndex找到插入的位置,然后通过splice插入

collection.splice(_.sortedIndex(collection,"pse"), 0,"pse");

4.where类似mongodb的findAll的查询条件

 var collection = [
       { name: 'Moe', age: 47, gender: 'm' },
       { name: 'Sarah', age: 32, gender: 'f' },
       { name: 'Melissa', age: 32, gender: 'f' },
       { name: 'Dave', age: 32, gender: 'm' }

];

 _.where(collection, { age: 32, gender: 'f' });//第二个参数里的所有条件会当做AND链接起来
 
   
5.如果where解决不了的复杂比较逻辑,就是用filter
filter(collection,func)
filter(collection, {enabled: true})  //这个重载函数和where测试下来功能一模一样,而且也支持多个参数
filter(collection,field);//根据对象的某个属性排序是否为true来进行过滤
 
   
var arr = [{name:"sakop"},{name:"leah",age:25}]

_.filter(arr,"age") //leah被留下了
 
  
6.filter和where还可以应对下面这种情况

var users = [
    {'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy']},
    {'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino']}
];

console.log(_.filter(users,{ 'pets': ['dino'] }));
console.log(_.where(users,{ 'pets': ['dino'] }));

7.find和findLast,参数和filter一致


8.take(arr,count),takeRight(arr,count)取数组的前(后)count个元素,返回值为数组,count不指定,默认为1

可以使用last和first取collection的首尾元素



9.uniq函数

var arr = ["sakop",“leah”,“sakop”] ;

_.uniq(arr) -> [sakop",“leah”];


uniq(collection,field);//根据field的唯一性来过滤


uniq(collection,func);//根据func的返回值来过滤


10.groupBy

var collection = [
    {name: 'Lori', size: 'S'},
    {name: 'Johnny', size: 'M'},
    {name: 'Theresa', size: 'S'},
    {name: 'Christine', size: 'S'}
];

console.log(_.groupBy(collection, "size"));

运行结果

{ S: 
   [ { name: 'Lori', size: 'S' },
     { name: 'Theresa', size: 'S' },
     { name: 'Christine', size: 'S' } ],
  M: [ { name: 'Johnny', size: 'M' } ] }


11.min,max

var _ = require("lodash");

var arr = [-12, 23, 5];
console.log(_.min(arr));

var people = [{age: 28}, {age: 25}];
console.log(_.min(people, "age"));

12.

 var collection = [
       { name: 'Gloria' },
       { name: 'Janice' },
       { name: 'Kathryn' },
       { name: 'Roger' }

];

   var first = _.first(collection);
   _.size(collection); // 4
   _.size(first); // 1
   _.size(first.name); // 6


13.flatten,将多个数组并成一个,compact去除数组中boolean值为false的元素


14.some,every,重载参数类型也是三种

every(arr,field) //是否所有元素都含有field

every(arr,obj)//是否所有元素和参数obj里的属性都能匹配上

every(arr,func).


15.union,intersection,xor


16.

isString,isPlainObject,isNumber,isNaN,isArray,isFunction注意NaN的类型是Number

typeof NaN
"number"


17.extend和assign是同义词,extend(dest,src1,src2...)将source中的值copy到dest去,注意后面的值会override前面的


18.merge比较复杂,如果dest和src是常量值或者字符串的话,dest会覆盖src,如果是object,那么dest的值会merge到src中。如果是array,dest也会覆盖src,如果希望合并数组,需要做如下处理

var object1 = {
        test: 1,
        states: {running: 'poweroff'},
        names: ['CentOS', 'REHL']
    },
    object2 = {
        test: 2,//覆盖dest
        states: {off: 'poweron'},//与dest的值合并
        names: ['Ubuntu', 'Debian'] //通过下面这个函数进行concat
    };

console.log(_.merge(object1, object2, function (dest, src) {
    if (_.isArray(src) && _.isArray(dest)) {
        return dest.concat(src);
    }
}));


19.defaults(dest,src) //在src中定义默认值,dest中如果存在该值了就什么都不做,如果没有就复制过去。



20.在find函数中,我们可以通过这种方式找到数组中的一个对象

var arr = [

    {name:"sakop", age:27},

    {name:"leah", age:25},

];

_.find(arr,{name:"sakop"});

同样地

var person = {
    name: {
        first: "sakop",
        last: "qiu"
    },
    address: {
        city: "shanghai",
        district: "changning"
    }
};//lodash将person对象看做拥有2个元素的数组,所以对该“数组”使用find操作可以找到对应的对象

console.log(_.find(person, {last: "qiu"}));//打印{ first: 'sakop', last: 'qiu' }

21.forOwn和forEach在处理object时行为一直,即打印他能枚举的所有属性(非prototype对象上的属性)。而forIn还包含prototype上的属性

var util = require("util");

function Animal() {
    this.type = "animal";
    this.color = "red";
}

Animal.prototype.sayHello = function () {
    console.log(this.type);
};

function Person() {
    Animal.call(this);//不要忘记执行父类构造函数
    this.type = "human";
}

util.inherits(Person, Animal);
Person.prototype.bye = function () {};//在继承之后定义更多的函数

var person = new Person();

var _ = require("lodash");
_.forIn(person, function (val, key) {//forIn会把原型链上的属性也打出来
    console.log(key + "->" + val); //打印type,color,还有sayHello
});

22._.at函数根据给出的field名数组或者索引数组,返回值数组

var arr = [0,2,3]

_.at(arr,[0,2]) -> [0,3]


23.keys,获得一个对象的所有key(不包含从原型继承而来的),values和arrays都返回对应的值。_.functions返回所有在该对象上定义的可执行的函数


24.偷工减料之_.result

var _ = require("lodash");

var object1 = {
    name: 'Brian',
    func: function () {
        return "hello";
    }
};

console.log(_.result(object1, "func"));//由lodash判断属性是静态属性还是函数
console.log(_.result(object1, "name"));
console.log(_.result(object1, "name123", "default value"));

25._.pairs把一个对象拆成键值对所组成的数组

var _ = require("lodash");
var object = {
    first: 'Katherine',
    last: 'Bailey',
    age: 33
};

console.log(_.pairs(object));  //[ [ 'first', 'Katherine' ], [ 'last', 'Bailey' ], [ 'age', 33 ] ]

26._.pick挑出某个object的一些属性,形成一个新对象,_.omit省略某些属性


27._.invoke(collection,funcName) //对集合中的每个元素调用funcName方法,并且把结果存入数组中,返回数组。

_.create(objPrototype,defaultValues),该方法类似于Object.create,但第二个参数的结构和Object.create不一样,第二个参数只需要指定变量名和值即可。在ECMAScript的Object.create中,第二个参数的变量必须是一个有

value: ctor,
enumerable: false,
writable: true,
configurable: true
属性的值。


28._.clone(obj,isDeep)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值