Skip to main content

Lodash 集合类精选

一、检测是否都为真 _.every

_.every(collection, [predicate=_.identity])

参数

  • collection (Array|Object): 一个用来迭代的集合。
  • predicate (Array|Function|Object|string): 每次迭代调用的函数。

返回

  • (boolean): 如果所有元素经 predicate(断言函数) 检查后都都返回真值,那么就返回true,否则返回 false 。

通过 predicate(断言函数) 检查 collection(集合)中的所有元素是否都返回真值。

一旦 predicate(断言函数) 返回假值,迭代就马上停止。

predicate(断言函数)调用三个参数: (value, index|key, collection)

_.every([true, 1, null, 'yes'], Boolean);
// => false

var users = [
{ 'user': 'barney', 'age': 36, 'active': false },
{ 'user': 'fred', 'age': 40, 'active': false }
];

// The `_.matches` iteratee shorthand.
_.every(users, { 'user': 'barney', 'active': false });
// => false

// The `_.matchesProperty` iteratee shorthand.
_.every(users, ['active', false]);
// => true

// The `_.property` iteratee shorthand.
_.every(users, 'active');
// => false

二、过滤集合 _.filter

_.filter(collection, [predicate=_.identity])

参数

  • collection (Array|Object): 一个用来迭代的集合。
  • predicate (Array|Function|Object|string): 每次迭代调用的函数。

返回

  • (Array): 返回一个新的过滤后的数组。

遍历 collection(集合)元素,返回 predicate(断言函数)返回真值 的所有元素的数组。

predicate(断言函数)调用三个参数:(value, index|key, collection)。

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 }]

// The `_.matches` iteratee shorthand.
_.filter(users, { 'age': 36, 'active': true });
// => [{ 'user': 'barney', 'age': 36, 'active': true }]

// The `_.matchesProperty` iteratee shorthand.
_.filter(users, ['active', false]);
// => [{ 'user': 'fred', 'age': 40, 'active': false }]

// The `_.property` iteratee shorthand.
_.filter(users, 'active');
// => [{ 'user': 'barney', 'age': 36, 'active': true }]

三、遍历集合 _.forEach

_.forEach(collection, [iteratee=_.identity])

参数

  • collection (Array|Object): 一个用来迭代的集合。
  • iteratee (Function): 每次迭代调用的函数。

返回

  • (*): 返回集合 collection。

调用 iteratee 遍历 collection(集合) 中的每个元素,iteratee 调用3个参数: (value, index|key, collection)。

如果迭代函数(iteratee)显式的返回 false ,迭代会提前退出。

_([1, 2]).forEach(function(value) {
console.log(value);
});
// => Logs `1` then `2`.

_.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
console.log(key);
});
// => Logs 'a' then 'b' (iteration order is not guaranteed).

四、检测元素是否存在 _.includes

_.includes(collection, value, [fromIndex=0])

参数

  • collection (Array|Object|string): 要检索的集合。
  • value (*): 要检索的值。
  • fromIndex (number): 要检索的索引位置,默认为 0。

返回

  • (boolean): 如果找到 value 返回 true, 否则返回 false。

检查 value(值) 是否在 collection(集合) 中。

如果 collection(集合)是一个字符串,那么检查 value(值,子字符串)是否在字符串中,否则使用SameValueZero 做等值比较。

如果指定 fromIndex 是负数,那么从 collection(集合) 的结尾开始检索。

_.includes([1, 2, 3], 1);
// => true

_.includes([1, 2, 3], 1, 2);
// => false

_.includes({ 'user': 'fred', 'age': 40 }, 'fred');
// => true

_.includes('pebbles', 'eb');
// => true

五、遍历并返回映射 _.map

_.map(collection, [iteratee=_.identity])

参数

  • collection (Array|Object): 用来迭代的集合。
  • iteratee (Array|Function|Object|string): 每次迭代调用的函数。

返回

  • (Array): 返回新的映射后数组。

创建一个数组, value(值) 是 iteratee(迭代函数)遍历 collection(集合)中的每个元素后返回的结果。

iteratee(迭代函数)调用3个参数: (value, index|key, collection)

function square(n) {
return n * n;
}

_.map([4, 8], square);
// => [16, 64]

_.map({ 'a': 4, 'b': 8 }, square);
// => [16, 64] (iteration order is not guaranteed)

var users = [
{ 'user': 'barney' },
{ 'user': 'fred' }
];

// The `_.property` iteratee shorthand.
_.map(users, 'user');
// => ['barney', 'fred']

六、遍历并返回统计 _.reduce

_.reduce(collection, [iteratee=_.identity], [accumulator])

参数

  • collection (Array|Object): 用来迭代的集合。
  • iteratee (Function): 每次迭代调用的函数。
  • accumulator (*): 初始值。

返回

  • (*): 返回累加后的值。

压缩 collection(集合)为一个值,通过 iteratee(迭代函数)遍历 collection(集合)中的每个元素,每次返回的值会作为下一次迭代使用(注:作为iteratee(迭代函数)的第一个参数使用)

如果没有提供 accumulator,则 collection(集合)中的第一个元素作为初始值。(注:accumulator参数在第一次迭代的时候作为iteratee(迭代函数)第一个参数使用)

iteratee 调用4个参数: _(accumulator, value, index|key, collection)_

_.reduce([1, 2], function(sum, n) {
return sum + n;
}, 0);
// => 3

_.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
(result[value] || (result[value] = [])).push(key);
return result;
}, {});
// => { '1': ['a', 'c'], '2': ['b'] } (无法保证遍历的顺序)

七、返回随机元素值 _.sample

_.sample(collection)

参数

  • collection (Array|Object): 要取样的集合。

返回

  • (*): 返回随机元素。

collection(集合)中获得一个随机元素。

_.sample([1, 2, 3, 4]);
// => 2

八、打乱元素顺序 _.shuffle

_.shuffle(collection)

参数

  • collection (Array|Object): 要打乱的集合。

返回

  • (Array): 返回打乱的新数组。

创建一个被打乱值的集合。 使用Fisher-Yates shuffle 版本。

_.shuffle([1, 2, 3, 4]);
// => [4, 1, 3, 2]

九、返回集合长度 _.size

_.size(collection)

参数

  • collection (Array|Object): 要检查的集合

返回

  • (number): 返回集合的长度。

返回 collection(集合)的长度,如果集合是类数组或字符串,返回其 length;如果集合是对象,返回其可枚举属性的个数。

_.size([1, 2, 3]);
// => 3

_.size({ 'a': 1, 'b': 2 });
// => 2

_.size('pebbles');
// => 7