Collection
_.at(collection, [props])
: 查找,根据索引或者键名来查找值,返回数组,props可以是数组,也可以是多个值(干净)
1 2 3 4 5
| _.at(['a', 'b', 'c'], [0, 2]); _.at(['barney', 'fred', 'pebbles'], 0, 2);
|
_.countBy(collection, [iteratee=_.identity], [thisArg])
: 遍历,统计,遍历collection,返回对象,对象中的key是iteratee处理后的返回值,值为重复的次数。(干净)
1 2 3 4 5 6 7 8 9 10 11 12
| _.countBy([4.3, 6.1, 6.4], function(n) { return Math.floor(n); }); _.countBy([4.3, 6.1, 6.4], function(n) { return this.floor(n); }, Math); _.countBy(['one', 'two', 'three'], 'length');
|
_.every(collection, [predicate=_.identity], [thisArg])
: 遍历,判断,遍历collection,判断是否每一项都符合predicate,返回boolean (干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| _.every([true, 1, null, 'yes'], Boolean); var users = [ { 'user': 'barney', 'active': false }, { 'user': 'fred', 'active': false } ]; _.every(users, { 'user': 'barney', 'active': false }); _.every(users, 'active', false); _.every(users, 'active');
|
_.filter(collection, [predicate=_.identity], [thisArg])
: 遍历,过滤,遍历collection,筛选出符合predicate的元素,返回数组(干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| _.filter([4, 5, 6], function(n) { return n % 2 == 0; }); var users = [ { 'user': 'barney', 'age': 36, 'active': true }, { 'user': 'fred', 'age': 40, 'active': false } ]; _.pluck(_.filter(users, { 'age': 36, 'active': true }), 'user'); _.pluck(_.filter(users, 'active', false), 'user'); _.pluck(_.filter(users, 'active'), 'user');
|
_.find(collection, [predicate=_.identity], [thisArg])
: 遍历,查找,遍历collection,查找出第一个符合predicate条件的一个元素并返回。单个元素 (干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var users = [ { 'user': 'barney', 'age': 36, 'active': true }, { 'user': 'fred', 'age': 40, 'active': false }, { 'user': 'pebbles', 'age': 1, 'active': true } ]; _.result(_.find(users, function(chr) { return chr.age < 40; }), 'user'); _.result(_.find(users, { 'age': 1, 'active': true }), 'user'); _.result(_.find(users, 'active', false), 'user'); _.result(_.find(users, 'active'), 'user');
|
_.findLast(collection, [predicate=_.identity], [thisArg])
: 类似上,反向
_.findWhere(collection, source)
: 遍历,查找,类似find,传参不同。(干净)
1 2 3 4 5 6 7 8 9 10
| var users = [ { 'user': 'barney', 'age': 36, 'active': true }, { 'user': 'fred', 'age': 40, 'active': false } ]; _.result(_.findWhere(users, { 'age': 36, 'active': true }), 'user'); _.result(_.findWhere(users, { 'age': 40, 'active': false }), 'user');
|
_.forEach(collection, [iteratee=_.identity], [thisArg])
: 遍历,遍历collection,对齐每个元素做响应的iteratee处理。(脏)
1 2 3 4 5 6 7 8 9
| _([1, 2]).forEach(function(n) { console.log(n); }).value(); _.forEach({ 'a': 1, 'b': 2 }, function(n, key) { console.log(n, key); });
|
_.forEachRight(collection, [iteratee=_.identity], [thisArg])
: 类似上,反向
_.groupBy(collection, [iteratee=_.identity], [thisArg])
: 分组,将collection根据iteratee进行分组。(干净)
1 2 3 4 5 6 7 8 9 10 11 12 13
| _.groupBy([4.2, 6.1, 6.4], function(n) { return Math.floor(n); }); _.groupBy([4.2, 6.1, 6.4], function(n) { return this.floor(n); }, Math); _.groupBy(['one', 'two', 'three'], 'length');
|
_.includes(collection, target, [fromIndex=0])
: 判断,判断collection中是否包含target。(干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| _.includes([1, 2, 3], 1); _.includes([1, 2, 3], 1, 2); _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); _.includes({ 'user': 'fred', 'age': 40 }, 'user'); _.includes('pebbles', 'eb');
|
_.indexBy(collection, [iteratee=_.identity], [thisArg])
: 遍历,倒置,遍历collention,返回对象,通过iteratee来获取指向元素的key,重复的key,后者覆盖前者(干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| var keyData = [ { 'dir': 'left', 'code': 97 }, { 'dir': 'right', 'code': 100 }, { 'dir': 'left', 'code': 101 } ]; _.indexBy(keyData, 'dir'); var keyData = [ { 'dir': 'left', 'code': 97 }, { 'dir': 'right', 'code': 100 } ]; _.indexBy(keyData, 'dir'); _.indexBy(keyData, function(object) { return String.fromCharCode(object.code); }); _.indexBy(keyData, function(object) { return this.fromCharCode(object.code); }, String);
|
_.invoke(collection, path, [args])
: 遍历 遍历collection中的每个元素,通过path提供的方法来处理,返回数组 (干净)
1 2 3 4 5
| _.invoke([[5, 1, 7], [3, 2, 1]], 'sort'); _.invoke([123, 456], String.prototype.split, '');
|
_.map(collection, [iteratee=_.identity],[thisArg])
: 遍历,取值 遍历数组获取需要的值 (干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| function timesThree(n) { return n * 3; } _.map([1, 2], timesThree); _.map({ 'a': 1, 'b': 2 }, timesThree); var users = [ { 'user': 'barney' }, { 'user': 'fred' } ]; _.map(users, 'user');
|
_.partition(collection, [predicate=_.identity], [thisArg])
: 遍历,分组 遍历collection,根据predicate来确定分组条件,返回数组 (干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| _.partition([1, 2, 3], function(n) { return n % 2; }); _.partition([1.2, 2.3, 3.4], function(n) { return this.floor(n) % 2; }, Math); var users = [ { 'user': 'barney', 'age': 36, 'active': false }, { 'user': 'fred', 'age': 40, 'active': true }, { 'user': 'pebbles', 'age': 1, 'active': false } ]; _.partition(users, { 'age': 1, 'active': false })
|
_.pluck(collection, path)
: 遍历,取值 遍历collection,去出path匹配的所有属性值,组成数组返回 (干净)
1 2 3 4 5 6 7 8 9 10 11
| var users = [ { 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 } ]; _.pluck(users, 'user'); var userIndex = _.indexBy(users, 'user'); _.pluck(userIndex, 'age');
|
_.reduce(collection, [iteratee=_.identity], [accumulator], [thisArg])
: 遍历 遍历collection,返回一个积累值 (干净)
1 2 3 4 5 6 7 8 9 10
| _.reduce([1, 2], function(total, n) { return total + n; }); _.reduce({ 'a': 1, 'b': 2 }, function(result, n, key) { result[key] = n * 3; return result; }, {});
|
_.reduceRight(collection, [iteratee=_.identity], [accumulator], [thisArg])
: 类似上,反向
_.reject(collection, [predicate=_.identity], [thisArg])
: 遍历,过滤过滤掉满足条件的值,与_.filter相反 (干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| _.reject([1, 2, 3, 4], function(n) { return n % 2 == 0; }); var users = [ { 'user': 'barney', 'age': 36, 'active': false }, { 'user': 'fred', 'age': 40, 'active': true } ]; _.pluck(_.reject(users, { 'age': 40, 'active': true }), 'user'); _.pluck(_.reject(users, 'active', false), 'user'); _.pluck(_.reject(users, 'active'), 'user');
|
_.sample(collection, [n])
: 随机数 从collection 随机取一个或者n个元素(干净)
1 2 3 4 5
| _.sample([1, 2, 3, 4]); _.sample([1, 2, 3, 4], 2);
|
_.shuffle(collection)
: 打乱,随机随机打乱一个collection (干净)
1 2
| _.shuffle([1, 2, 3, 4]);
|
_.size(collection)
: 长度,大小 获取collection的长度(干净)
1 2 3 4 5 6 7 8
| _.size([1, 2, 3]); _.size({ 'a': 1, 'b': 2 }); _.size('pebbles');
|
_.some(collection, [predicate=_.identity], [thisArg])
: 判断,遍历 遍历collection,判断是否存在某个元素符合predicate (干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| _.some([null, 0, 'yes', false], Boolean); var users = [ { 'user': 'barney', 'active': true }, { 'user': 'fred', 'active': false } ]; _.some(users, { 'user': 'barney', 'active': false }); _.some(users, 'active', false); _.some(users, 'active');
|
_.sortBy(collection, [iteratee=_.identity], [thisArg])
: 排序 根据iteratee对collection进行排序,(干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| _.sortBy([1, 2, 3], function(n) { return Math.sin(n); }); _.sortBy([1, 2, 3], function(n) { return this.sin(n); }, Math); var users = [ { 'user': 'fred' }, { 'user': 'pebbles' }, { 'user': 'barney' } ]; _.pluck(_.sortBy(users, 'user'), 'user');
|
_.sortByAll(collection, iteratees)
: 排序 根据iteratees多条件对collection进行排序,(干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| var users = [ { 'user': 'fred', 'age': 48 }, { 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 42 }, { 'user': 'barney', 'age': 34 } ]; _.map(_.sortByAll(users, ['user', 'age']), _.values); _.map(_.sortByAll(users, 'user', function(chr) { return Math.floor(chr.age / 10); }), _.values);
|
_.sortByOrder(collection, iteratees, [orders])
:排序可以控制升序还是降序(干净)
1 2 3 4 5 6 7 8 9 10
| var users = [ { 'user': 'fred', 'age': 48 }, { 'user': 'barney', 'age': 34 }, { 'user': 'fred', 'age': 42 }, { 'user': 'barney', 'age': 36 } ]; _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);
|
_.where(collection, source)
: 遍历,过滤返回符合条件的元素组成的数组(干净)
1 2 3 4 5 6 7 8 9 10
| var users = [ { 'user': 'barney', 'age': 36, 'active': false, 'pets': ['hoppy'] }, { 'user': 'fred', 'age': 40, 'active': true, 'pets': ['baby puss', 'dino'] } ]; _.pluck(_.where(users, { 'age': 36, 'active': false }), 'user'); _.pluck(_.where(users, { 'pets': ['dino'] }), 'user');
|
Array
_.chunk(array, [size=1])
: 拆分,将 array 拆分成多个 size 长度的块,把这些块组成一个新二维数组。 如果无法被分割成全部等长的块,那么最后剩余的元素将组成一个块。(干净)
1 2
| _.chunk(['a', 'b', 'c', 'd'], 2);
|
_.compact(array)
: 过滤,去掉假值,例如:false、null、 0、””、undefined 和 NaN (干净)
1 2
| _.compact([0, 1, false, 2, '', 3]);
|
_.difference(array, [values])
: 过滤,去掉array中存在于values中的元素,区分字符和数字 (干净)
1 2 3 4
| _.difference([1, 2, 3], [4, 2]); _.difference([1, '2', 3], [4, 2]);
|
_.pull(array, [values])
: 过滤,移除数组array中所有和 values 相等===的元素 (脏)
1 2 3 4 5
| var array = [1, 2, 3, 1, 2, 3]; _.pull(array, 2, 3); console.log(array);
|
_.without(array, [values])
: 过滤,移除数组array中所有和 values 相等===的元素 (干净)
1 2 3 4 5
| var array = [1, 2, 3, 1, 2, 3]; _.pull(array, 2, 3); console.log(array);
|
_.pullAt(array, [indexes])
: 过滤,移除指定索引的数组元素,并返回移除的元素,索引值明确给出或者是索引数组. (脏)
1 2 3 4 5 6 7 8
| var array = [5, 10, 15, 20]; var evens = _.pullAt(array, 1, 3); console.log(array); console.log(evens);
|
_.remove(array, [predicate=_.identity], [thisArg])
: 过滤,移除数组 array 中满足 predicate 条件的所有元素 ,返回的是被移除元素数组. (脏)
1 2 3 4 5 6 7 8 9 10
| var array = [1, 2, 3, 4]; var evens = _.remove(array, function(n) { return n % 2 == 0; }); console.log(array); console.log(evens);
|
_.drop(array, [n=1])
: 截取,去掉头部n个元素 (干净)
_.dropRight(array, [n=1])
: 类似上
_.dropWhile(array, [predicate=_.identity], [thisArg])
: 截取,从开头查询(左数起)数组 array ,第一个不满足predicate 条件的元素开始截取数组. thisArg为predicate 条件执行上下文对象绑定的参数 . [predicate=_.identity] 可以为 (Function|Object|string) (干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| _.dropWhile([1, 2, 3], function(n) { return n < 3; }); var users = [ { 'user': 'barney', 'active': false }, { 'user': 'fred', 'active': false }, { 'user': 'pebbles', 'active': true } ]; _.pluck(_.dropWhile(users, { 'user': 'barney', 'active': false }), 'user'); _.pluck(_.dropWhile(users, 'active', false), 'user'); _.pluck(_.dropWhile(users, 'active'), 'user');
|
_.dropRightWhile(array, [predicate=_.identity], [thisArg])
:类似上
_.takeWhile(array, [predicate=_.identity], [thisArg])
: 类似,第一个满足predicate 条件的元素开始截取数组
_.takeRightWhile(array, [predicate=_.identity], [thisArg])
: 类似上
_.fill(array, value, [start=0], [end=array.length])
: 替换,使用 value 值来填充(也就是替换) array,从start位置开始, 到end位置结束(但不包含end位置) (脏)
1 2 3 4 5 6 7 8 9 10 11
| var array = [1, 2, 3]; _.fill(array, 'a'); console.log(array); _.fill(Array(3), 2); _.fill([4, 6, 8], '*', 1, 2);
|
_.findIndex(array, [predicate=_.identity], [thisArg])
: 替换,该方法类似 .find,区别是该方法返回的是符合 predicate条件的第一个元素的索引,而不是返回元素本身. [predicate=.identity]可以为(Function|Object|string),未找到则返回 -1. (干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var users = [ { 'user': 'barney', 'active': false }, { 'user': 'fred', 'active': false }, { 'user': 'pebbles', 'active': true } ]; _.findIndex(users, function(chr) { return chr.user == 'barney'; }); _.findIndex(users, { 'user': 'fred', 'active': false }); _.findIndex(users, 'active', false); _.findIndex(users, 'active');
|
_.findLastIndex(array, [predicate=_.identity], [thisArg])
:类似上
_.flatten(array, [isDeep])
: 降维 将低数组维数,默认降低一维,如果isDeep = true则递归降到一维。(干净)
1 2 3 4 5 6
| _.flatten([1, [2, 3, [4]]]); _.flatten([1, [2, 3, [4]]], true);
|
_.flattenDeep(array)
: 相当于_.flatten(array, true)
_.indexOf(array, value, [fromIndex=0])
: 查找 获取value在数组 array中匹配的第一个全等元素的索引值 如果 fromIndex 值是负数, 则从array末尾起算. 如果 fromIndex为true时,对已排序的数组array执行二分查找。(干净)
1 2 3 4 5 6 7 8 9 10
| _.indexOf([1, 2, 1, 2], 2); _.indexOf([1, 2, 1, 2], 2, 2); _.indexOf([1, 1, 2, 2], 2, true);
|
_.lastIndexOf(array, value, [fromIndex=array.length-1])
: 类似上
_.intersection([arrays])
: 过滤,查找 提取全等===,返回共有元素的数组。(干净)
1 2
| _.intersection([1, 2], [4, 2], [2, 1]);
|
_.union([arrays])
: 合并,去重 合并去重 (干净)
1 2
| _.union([1, 2], [4, 2], [2, 1]);
|
_.xor([arrays])
: 合并,去重 合并去重,注意和union的区别 (干净)
_.uniq(array, [isSorted], [iteratee], [thisArg])
: 过滤,去重 isSorted (boolean): 是否排序好,对数组中的每个元素经过iteratee处理后去重 (干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| _.uniq([2, 1, 2]); _.uniq([1, 1, 2], true); _.uniq([1, 2.5, 1.5, 2], function(n) { return this.floor(n); }, Math); _.uniq([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
|
_.sortedIndex(array, value, [iteratee=_.identity], [thisArg])
: 插入 value (*): 插入的判断参数
[iteratee=_.identity]可以为(Function|Object|string): 遍历方法
[thisArg]: iteratee的绑定值,返回value 应该插入数组array位置的索引值(干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| _.sortedIndex([40,20,10,50], 40); _.sortedIndex([4, 4, 5, 5], 5); var dict = { 'data': { 'thirty': 30, 'forty': 40, 'fifty': 50 } }; _.sortedIndex(['thirty', 'fifty'], 'forty', function(word) { return this.data[word]; }, dict); _.sortedIndex([{ 'x': 30 }, { 'x': 50 }], { 'x': 40 }, 'x');
|
_.sortedLastIndex(array, value, [iteratee=_.identity], [thisArg])
: 类似上
_.zip([arrays])
: 分组,合并 (多一维数组->一个二维数组)将各数组索引相同的组合成新二维数组,有这为undefined (干净)
1 2
| _.zip(['fred', 'barney'], [30, 40, 50], [true, false]);
|
_.unzip(array)
: 分组,合并 (一个二维数组->一个二维数组)类似zip的逆过程,对zip处理过的数组进行再分组,将各数组索引相同的组合成新二维数组,有这为undefined (干净)
1 2 3 4 5
| var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); _.unzip(zipped);
|
_.zipWith([arrays], [iteratee], [thisArg])
: 分组,合并 重新分组后对个数组进行统一处理 (干净)
1 2
| _.zipWith([1, 2], [10, 20], [100, 200], _.add);
|
_.unzipWith(array, [iteratee], [thisArg])
: 分组,合并 对zip处理过的数组进行再分组,再对各数组进行统一处理(干净)
1 2 3 4 5
| var zipped = _.zip(['fred', 'barney'], [30, 40], [true, false]); _.unzip(zipped);
|
_.zipObject(props, [values=[]])
: 数组转对象 (干净)
1 2 3 4 5
| _.zipObject([['fred', 30], ['barney', 40]]); _.zipObject(['fred', 'barney'], [30, 40]);
|
Object
_.assign(object, [sources], [customizer], [thisArg])
: 合并,去重 相同属性时后面的对象可以会重写前面的对象 (干净)
1 2 3 4 5 6 7 8 9 10
| _.assign({ 'user': 'barney' }, { 'age': 40 }, { 'user': 'fred' }); var defaults = _.partialRight(_.assign, function(value, other) { return _.isUndefined(value) ? other : value; }); defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
|
_.create(prototype, [properties])
: 原型,继承
创建一个继承于prototype对象的新对象 (干净)
1 2 3 4 5 6
| _.create({aa:1}, {b:3}); b: 3 __proto__: aa: 1 __proto__: Object
|
_.defaults(object, [sources])
: 合并,去重
相同属性时,后面的对象会被忽略 (干净)
1 2
| _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
|
_.defaultsDeep(object, [sources])
: 合并,去重
相同属性时,后面的对象会被忽略,递归 (干净)
1 2
| _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });
|
_.findKey(object, [predicate=_.identity], [thisArg])
: 查找
根据条件查找第一个符合的key (干净)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var users = { 'barney': { 'age': 36, 'active': true }, 'fred': { 'age': 40, 'active': false }, 'pebbles': { 'age': 1, 'active': true } }; _.findKey(users, function(chr) { return chr.age < 40; }); _.findKey(users, { 'age': 1, 'active': true }); _.findKey(users, 'active', false); _.findKey(users, 'active');
|
_.findLastKey(object, [predicate=_.identity], [thisArg])
: 类似上,反向
_.forIn(objectTar, [iteratee=_.identity], [thisArg])
: 遍历
传入 (value, key, object)参数中的object是objectTar,会遍历原型中的属性,返回对象objectTar (脏)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| function Foo() { this.a = 1; this.b = 2; } Foo.prototype.c = 3; _.forIn(new Foo, function(value, key) { console.log(key); }); let obj = new Foo; _.forIn(obj, function(value, key, obj) { obj[key] = value * 2 });
|
_.forInRight(objectTar, [iteratee=_.identity], [thisArg])
: 类似上,反向
_.forOwn(objectTar, [iteratee=_.identity], [thisArg])
: 遍历
传入 (value, key, objectTar)参数中的object是objectTar,不会遍历原型中的属性 (脏)
1 2 3 4 5 6 7 8 9 10 11 12
| function Foo() { this.a = 1; this.b = 2; } Foo.prototype.c = 3; _.forOwn(new Foo, function(value, key) { console.log(key); });
|
_.forOwnRight(objectTar, [iteratee=_.identity], [thisArg])
: 类似上,反向
_.functions(object)
: 查找,键名 查找对象中属性值为函数的属性名,返回属性名数组 (脏)
_.get(object, path, [defaultValue])
: 查找
defaultValue 为找不到匹配值时返回
1 2 3 4 5 6 7 8 9 10
| var object = { 'a': [{ 'b': { 'c': 3 } }] }; _.get(object, 'a[0].b.c'); _.get(object, ['a', '0', 'b', 'c']); _.get(object, 'a.b.c', 'default');
|
_.result(object, path, [defaultValue])
: 查找
defaultValue 为找不到匹配值时返回,与_.get的区别在于,如果匹配到的是一个函数,则会执行函数返回值作为最后的结构,this指向父级object。
1 2 3 4 5 6 7 8 9 10 11 12 13
| var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; _.result(object, 'a[0].b.c1'); _.result(object, 'a[0].b.c2'); _.result(object, 'a.b.c', 'default'); _.result(object, 'a.b.c', _.constant('default'));
|
_.set(object, path, value)
: 赋值,设置 返回object,如果不存在路径,则创建 (脏)
1 2 3 4 5 6 7 8 9
| var object = { 'a': [{ 'b': { 'c': 3 } }] }; _.set(object, 'a[0].b.c', 4); console.log(object.a[0].b.c); _.set(object, 'x[0].y.z', 5); console.log(object.x[0].y.z);
|
_.has(object, path)
: 类似上,判断是否存在该路径属性 查找,判断
_.invert(object, [multiValue])
: 转换 交换key和value,如果存在value相同的属性,在multiValue不同是有不同的处理 (干净)
1 2 3 4 5 6 7 8
| var object = { 'a': 1, 'b': 2, 'c': 1 }; _.invert(object); _.invert(object, true);
|
_.keys(object)
: 查找,键名,返回对象键名组成的数组,不包含原型上的
1 2 3 4 5 6 7 8 9 10 11 12
| function Foo() { this.a = 1; this.b = 2; } Foo.prototype.c = 3; _.keys(new Foo); _.keys('hi');
|
_.keysIn(object)
:类似上,包含原型链上的
_.valuesIn(object)
:类似下,包含原型链上的
_.values(object)
: 类似上
1 2 3 4 5 6 7 8 9 10 11 12
| function Foo() { this.a = 1; this.b = 2; } Foo.prototype.c = 3; _.values(new Foo); _.values('hi');
|
_.mapKeys(object, [iteratee=_.identity], [thisArg])
: 替换,遍历,键名 遍历对象,根据iteratee替换键名 干净
1 2 3 4
| _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { return key + value; });
|
_.mapValues(object, [iteratee=_.identity], [thisArg])
: 替换,遍历 遍历对象,根据iteratee替换键值 干净
1 2 3 4 5 6 7 8 9 10 11 12 13
| _.mapValues({ 'a': 1, 'b': 2 }, function(n) { return n * 3; }); var users = { 'fred': { 'user': 'fred', 'age': 40 }, 'pebbles': { 'user': 'pebbles', 'age': 1 } }; _.mapValues(users, 'age');
|
_.merge(object, [sources], [customizer], [thisArg])
:合并,分组 根据customizer将sources合并到object中,并返回object (脏)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| var users = { 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] }; var ages = { 'data': [{ 'age': 36 }, { 'age': 40 }] }; _.merge(users, ages); var object = { 'fruits': ['apple'], 'vegetables': ['beet'] }; var other = { 'fruits': ['banana'], 'vegetables': ['carrot'] }; _.merge(object, other, function(a, b) { if (_.isArray(a)) { return a.concat(b); } });
|
_.omit(object, [predicate], [thisArg])
过滤,遍历,键名 创建一个新对象,包含object中不符合predicate的键值对 (干净)
1 2 3 4 5 6 7
| var object = { 'user': 'fred', 'age': 40 }; _.omit(object, 'age'); _.omit(object, _.isNumber);
|
_.pick(object, [predicate], [thisArg])
: 过滤,遍历,键名 创建一个新对象,包含object中符合predicate的键值对 (干净)
1 2 3 4 5 6 7
| var object = { 'user': 'fred', 'age': 40 }; _.pick(object, 'user'); _.pick(object, _.isString);
|
_.pairs(object)
: 转换 将对象转为[[key1, value1], [key2, value2]] (干净)
1 2
| _.pairs({ 'barney': 36, 'fred': 40 });
|
_.transform(object, [iteratee=_.identity], [accumulator], [thisArg])
: 遍历,转换 遍历object通过iteratee转成result (干净)
1 2 3 4 5 6 7 8 9 10
| _.transform([2, 3, 4], function(result, n) { result.push(n *= n); return n % 2 == 0; }); _.transform({ 'a': 1, 'b': 2 }, function(result, n, key) { result[key] = n * 3; });
|