您的位置:首页 > 其它

lodash摘要

2015-08-31 10:01 302 查看
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) //是否所有元素都含有fieldevery(arr,obj)//是否所有元素和参数obj里的属性都能匹配上every(arr,func).15.union,intersection,xor16.isString,isPlainObject,isNumber,isNaN,isArray,isFunction注意NaN的类型是Numbertypeof 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,//覆盖deststates: {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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: