Collection方法#
在介绍集合方法之前首先介绍一下collection的概念,可能有后端开发经验的小伙伴们对集合的概念并不陌生,比如java中的集合类(list,set,map),但是在js当中并没有那么多原生的数据结构,只能用数组的方法来模拟类似的数据结构。比如使用push,pop方法来模拟压栈和出栈,使用push,shift来模拟进出队列的数据结构。而在这里collection的集合指的是多个数组或对象组成的数据结构,类似JSON。因此数组和对象也可以使用集合的某些方法。下面就开始逐一介绍。
1..countBy(collection, [iteratee=.identity])
遍历传入的集合,用传入的处理函数进行处理,返回一个结果值和个数的键值对组成的对象。
collection (Array|Object): 待遍历的集合(可以是数组或对象).
[iteratee=_.identity] :(Function):处理函数.
例:
_.countBy([6.1, 4.2, 6.3], Math.floor);
// => { '4': 1, '6': 2 }(通过后面函数处理,结果为'4'的有一个,结果为'6'的有两个)
// The `_.property` iteratee shorthand.
_.countBy(['one', 'two', 'three'], 'length');
// => { '3': 2, '5': 1 }
2..every(collection, [predicate=.identity])
遍历传入的集合,如果所有值都符合传入的条件,则返回true,否则返回false。一旦遇到不符合规则的入参,则直接返回false并停止执行。
collection (Array|Object): 待遍历的集合(可以是数组或对象).
[predicate=_.identity] (Function): 对每个值进行调用的函数.
例:
_.every([true, 1, null, 'yes'], Boolean);
// => false
var users = [
{ 'user': 'barney', 'age': 36, 'active': false },
{ 'user': 'fred', 'age': 40, 'active': false }
];
_.every(users, { 'user': 'barney', 'active': false });
// => false
_.every(users, ['active', false]);
// => true
_.every(users, 'active');
// => false
-
.filter(collection, [predicate=.identity])
通过处理函数遍历整个集合,用处理函数对集合进行删选,返回一个新的数组,请注意这个方法的返回值是一个数组。
collection (Array|Object): 待遍历的集合(可以是数组或对象).
[predicate=_.identity] (Function): 对每个值进行调用的函数.
例:
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false }
];
_.filter(users, function(o) { return !o.active; });
// => [{ 'user': 'fred', 'age': 40, 'active': false }]
_.filter(users, { 'age': 36, 'active': true });
// => [ { 'user': 'barney', 'age': 36, 'active': true }]
_.filter(users, ['active', false]);
// => [{ 'user': 'fred', 'age': 40, 'active': false }]
_.filter(users, 'active');
// => [ { 'user': 'barney', 'age': 36, 'active': true }]
4..find(collection, [predicate=.identity], [fromIndex=0])
通过处理函数对集合中的每个值进行处理,返回第一个符合的元素。
collection (Array|Object): 待遍历的集合(可以是数组或对象).
[predicate=_.identity] (Function): 对每个值进行调用的函数.
[fromIndex=0] (number): 筛选的七点索引.
例:
var users = [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false },
{ 'user': 'pebbles', 'age': 1, 'active': true }
];
_.find(users, function(o) { return o.age < 40; });
// => [
{ 'user': 'barney', 'age': 36, 'active': true },
{ 'user': 'fred', 'age': 40, 'active': false },
{ 'user': 'pebbles', 'age': 1, 'active': true }
];
_.find(users, { 'age': 1, 'active': true });
// => { 'user': 'pebbles', 'age': 1, 'active': true }
_.find(users, ['active', false]);
// => { 'user': 'fred', 'age': 40, 'active': false },
_.find(users, 'active');
// =>{ 'user': 'barney', 'age': 36, 'active': true },
5..findLast(collection, [predicate=.identity], [fromIndex=collection.length-1])
这个方法和_.find相似,区别是从右向左进行查找。