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被留下了
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返回所有在该对象上定义的可执行的函数
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)