Collection (集合)
_.countBy(collection, [iteratee=_.identity])
引入版本 0.5.0
创建一个对象,其键(key)是 iteratee(迭代函数)遍历 collection(集合)中的每个元素后返回的结果,对应的值(value)是该结果出现的次数。
iteratee 调用时会传入一个参数:(value)。
参数
- collection
(Array|Object): 要遍历的集合。 - [iteratee=_.identity]
(Function): 用来转换键的迭代函数。
返回
- (Object): 返回一个组成的统计对象。
示例
_.countBy([6.1, 4.2, 6.3], Math.floor);
// => { '4': 1, '6': 2 }
// 使用 `_.property` 的迭代器简写
_.countBy(["one", "two", "three"], "length");
// => { '3': 2, '5': 1 }_.every(collection, [predicate=_.identity])
引入版本 0.1.0
检查 collection(集合)中的 所有 元素是否都通过了 predicate(断言函数)的真值检查。一旦 predicate 返回假值,遍历就会立即停止。
predicate 调用时会传入三个参数:(value, index|key, collection)。
注意: 对于空集合,此方法返回 true。
参数
- collection
(Array|Object): 要遍历的集合。 - [predicate=_.identity]
(Function): 每次迭代调用的函数。
返回
- (boolean): 如果所有元素都通过断言检测返回
true,否则返回false。
示例
_.every([true, 1, null, "yes"], Boolean);
// => false
var users = [
{ user: "barney", age: 36, active: false },
{ user: "fred", age: 40, active: false },
];
// 使用 `_.matches` 的迭代器简写
_.every(users, { user: "barney", active: false });
// => false
// 使用 `_.matchesProperty` 的迭代器简写
_.every(users, ["active", false]);
// => true
// 使用 `_.property` 的迭代器简写
_.every(users, "active");
// => false_.filter(collection, [predicate=_.identity])
引入版本 0.1.0
遍历 collection(集合)中的元素,返回一个包含所有通过 predicate(断言函数)真值检测的元素的新数组。
predicate 调用时会传入三个参数:(value, index|key, collection)。
注意: 不同于 _.remove,该方法返回一个新的数组(不会改变原集合)。
参数
- collection
(Array|Object): 待遍历的集合。 - [predicate=_.identity]
(Function): 每次迭代调用的函数。
返回
- (Array): 返回过滤后的新数组。
示例
var users = [
{ user: "barney", age: 36, active: true },
{ user: "fred", age: 40, active: false },
];
_.filter(users, function (o) {
return !o.active;
});
// => objects for ['fred']
// 使用 `_.matches` 的迭代器简写
_.filter(users, { age: 36, active: true });
// => objects for ['barney']
// 使用 `_.matchesProperty` 的迭代器简写
_.filter(users, ["active", false]);
// => objects for ['fred']
// 使用 `_.property` 的迭代器简写
_.filter(users, "active");
// => objects for ['barney']_.find(collection, [predicate=_.identity], [fromIndex=0])
引入版本 0.1.0
遍历 collection(集合)中的元素,返回第一个通过 predicate(断言函数)真值检测的元素。
predicate 调用时会传入三个参数:(value, index|key, collection)。
参数
- collection
(Array|Object): 待检索的集合。 - [predicate=_.identity]
(Function): 每次迭代调用的函数。 - [fromIndex=0]
(number): 开始搜索的索引位置。
返回
- (*): 返回匹配的元素,否则返回
undefined。
示例
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;
});
// => object for 'barney'
// 使用 `_.matches` 的迭代器简写
_.find(users, { age: 1, active: true });
// => object for 'pebbles'
// 使用 `_.matchesProperty` 的迭代器简写
_.find(users, ["active", false]);
// => object for 'fred'
// 使用 `_.property` 的迭代器简写
_.find(users, "active");
// => object for 'barney'_.findLast(collection, [predicate=_.identity], [fromIndex=collection.length-1])
引入版本 2.0.0
这个方法类似 _.find,区别在于它是从右到左(即反向)遍历 collection(集合)中的元素。
参数
- collection
(Array|Object): 待检索的集合。 - [predicate=_.identity]
(Function): 每次迭代调用的函数。 - [fromIndex=collection.length-1]
(number): 开始搜索的索引位置。
返回
- (*): 返回匹配的元素,否则返回
undefined。
示例
_.findLast([1, 2, 3, 4], function (n) {
return n % 2 == 1;
});
// => 3_.flatMap(collection, [iteratee=_.identity])
引入版本 4.0.0
创建一个扁平化的数组,先遍历 collection(集合)中的每个元素并调用 iteratee(迭代函数),然后将映射结果扁平化(相当于先调用 map 再调用 flatten,深度为 1)。
iteratee 调用时会传入三个参数:(value, index|key, collection)。
参数
- collection
(Array|Object): 待遍历的集合。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。
返回
- (Array): 返回新的扁平化数组。
示例
function duplicate(n) {
return [n, n];
}
_.flatMap([1, 2], duplicate);
// => [1, 1, 2, 2]_.flatMapDeep(collection, [iteratee=_.identity])
引入版本 4.7.0
该方法类似 _.flatMap,区别在于它会 递归地 扁平化映射后的结果。
参数
- collection
(Array|Object): 要遍历的集合。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。
返回
- (Array): 返回新的扁平化数组。
示例
function duplicate(n) {
return [[[n, n]]];
}
_.flatMapDeep([1, 2], duplicate);
// => [1, 1, 2, 2]_.flatMapDepth(collection, [iteratee=_.identity], [depth=1])
引入版本 4.7.0
该方法类似 _.flatMap,区别在于它会根据指定的 depth(深度)递归地扁平化映射后的结果。
参数
- collection
(Array|Object): 待遍历的集合。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。 - [depth=1]
(number): 最大递归深度。
返回
- (Array): 返回新的扁平化数组。
示例
function duplicate(n) {
return [[[n, n]]];
}
_.flatMapDepth([1, 2], duplicate, 2);
// => [[1, 1], [2, 2]]_.forEach(collection, [iteratee=_.identity])
引入版本 0.1.0
遍历 collection(集合)中的元素,并为每个元素调用 iteratee(迭代函数)。
iteratee 调用时会传入三个参数:(value, index|key, collection)。如果迭代函数显式返回 false,迭代会提前退出。
注意: 与其他 "Collection" 方法一样,拥有 "length" 属性的对象会被视为类数组对象进行遍历。如果想避免这种行为(即按对象属性遍历),请使用 _.forIn 或 _.forOwn。
别名: _.each
参数
- collection
(Array|Object): 待遍历的集合。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。
返回
- (*): 返回
collection(集合本身)。
示例
_.forEach([1, 2], function (value) {
console.log(value);
});
// => 输出 `1` 然后是 `2`。
_.forEach({ a: 1, b: 2 }, function (value, key) {
console.log(key);
});
// => 输出 'a' 然后是 'b' (不保证迭代顺序)。_.forEachRight(collection, [iteratee=_.identity])
引入版本 2.0.0
这个方法类似 _.forEach,区别在于它是从右到左(即反向)遍历 collection(集合)中的元素。
别名: _.eachRight
参数
- collection
(Array|Object): 要遍历的集合。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。
返回
- (*): 返回
collection(集合本身)。
示例
_.forEachRight([1, 2], function (value) {
console.log(value);
});
// => 输出 `2` 然后是 `1`。_.groupBy(collection, [iteratee=_.identity])
引入版本 0.1.0
创建一个对象,key 是 iteratee(迭代函数)遍历 collection(集合)中的每个元素返回的结果。分组值的顺序由它们在 collection 中出现的顺序决定。每个 key 对应的值(value)是负责生成该 key 的元素组成的数组。
iteratee 调用时会传入一个参数:(value)。
参数
- collection
(Array|Object): 要遍历的集合。 - [iteratee=_.identity]
(Function): 用来转换键的迭代函数。
返回
- (Object): 返回聚合后的对象。
示例
_.groupBy([6.1, 4.2, 6.3], Math.floor);
// => { '4': [4.2], '6': [6.1, 6.3] }
// 使用 `_.property` 的迭代器简写
_.groupBy(["one", "two", "three"], "length");
// => { '3': ['one', 'two'], '5': ['three'] }_.includes(collection, value, [fromIndex=0])
引入版本 0.1.0
检查 value 是否在 collection(集合)中。如果 collection 是一个字符串,那么检查 value 是否为子字符串。否则,使用 SameValueZero 进行相等比较。如果 fromIndex 是负数,则将其用作从 collection 末尾开始的偏移量。
参数
- collection
(Array|Object|string): 要检查的集合。 - value
(*): 要搜索的值。 - [fromIndex=0]
(number): 开始搜索的索引位置。
返回
- (boolean): 如果找到
value返回true,否则返回false。
示例
_.includes([1, 2, 3], 1);
// => true
_.includes([1, 2, 3], 1, 2);
// => false
_.includes({ a: 1, b: 2 }, 1);
// => true
_.includes("abcd", "bc");
// => true_.invokeMap(collection, path, [args])
引入版本 4.0.0
调用 collection(集合)中每个元素的 path(路径)上的方法,并返回一个包含每次调用结果的数组。任何附加的参数都会在调用每个方法时传入。如果 path 是一个函数,它会被调用,并且 this 会绑定到 collection 中的每个元素。
参数
- collection
(Array|Object): 待遍历的集合。 - path
(Array|Function|string): 要调用的方法路径或每次迭代调用的函数。 - [args]
(...*): 调用每个方法时传入的参数。
返回
- (Array): 返回结果数组。
示例
_.invokeMap(
[
[5, 1, 7],
[3, 2, 1],
],
"sort"
);
// => [[1, 5, 7], [1, 2, 3]]
_.invokeMap([123, 456], String.prototype.split, "");
// => [['1', '2', '3'], ['4', '5', '6']]_.keyBy(collection, [iteratee=_.identity])
引入版本 4.0.0
创建一个对象,组成该对象的键(key)是通过 iteratee(迭代函数)遍历 collection(集合)中的每个元素生成的结果。每个键对应的值(value)是最后一个生成该键的元素(如果多个元素生成相同的键,后面的会覆盖前面的)。
iteratee 调用时会传入一个参数:(value)。
参数
- collection
(Array|Object): 待遍历的集合。 - [iteratee=_.identity]
(Function): 用来转换键的迭代函数。
返回
- (Object): 返回组成的聚合对象。
示例
var array = [
{ dir: "left", code: 97 },
{ dir: "right", code: 100 },
];
_.keyBy(array, function (o) {
return String.fromCharCode(o.code);
});
// => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
_.keyBy(array, "dir");
// => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }_.map(collection, [iteratee=_.identity])
引入版本 0.1.0
创建一个新数组,其元素是 iteratee(迭代函数)遍历 collection(集合)中的每个元素后的返回结果。
iteratee 调用时会传入三个参数:(value, index|key, collection)。
注意: 许多 Lodash 方法(如 parseInt)都被设计为可以安全地作为 iteratee 使用,它们会忽略多余的参数(这与原生 map 配合 parseInt 时经常出的错不同)。
参数
- collection
(Array|Object): 待遍历的集合。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。
返回
- (Array): 返回映射后的新数组。
示例
function square(n) {
return n * n;
}
_.map([4, 8], square);
// => [16, 64]
_.map({ a: 4, b: 8 }, square);
// => [16, 64] (不保证迭代顺序)
var users = [{ user: "barney" }, { user: "fred" }];
// 使用 `_.property` 的迭代器简写
_.map(users, "user");
// => ['barney', 'fred']_.orderBy(collection, [iteratees=[_.identity]], [orders])
引入版本 4.0.0
此方法类似 _.sortBy,区别在于它允许指定 iteratees(迭代函数/属性)的排序顺序。如果未指定 orders,所有值默认按 升序 排序。否则,请指定 "desc" 为 降序,或 "asc" 为 升序。
参数
- collection
(Array|Object): 要遍历的集合。 - [iteratees=[_.identity]]
(Array[]|Function[]|Object[]|string[]): 排序的依据。 - [orders]
(string[]):iteratees对应的排序顺序。
返回
- (Array): 返回排序后的新数组。
示例
var users = [
{ user: "fred", age: 48 },
{ user: "barney", age: 34 },
{ user: "fred", age: 40 },
{ user: "barney", age: 36 },
];
// 以 `user` 升序排序,再以 `age` 降序排序。
_.orderBy(users, ["user", "age"], ["asc", "desc"]);
// => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]_.partition(collection, [predicate=_.identity])
引入版本 3.0.0
创建一个元素数组,被拆分为两组:第一组包含 predicate(断言函数)返回为真值(truthy)的元素,第二组包含 predicate 返回为假值(falsey)的元素。
predicate 调用时会传入一个参数:(value)。
参数
- collection
(Array|Object): 待遍历的集合。 - [predicate=_.identity]
(Function): 每次迭代调用的函数。
返回
- (Array): 返回分组元素后的数组。(第一个元素是真值组,第二个元素是假值组)。
示例
var users = [
{ user: "barney", age: 36, active: false },
{ user: "fred", age: 40, active: true },
{ user: "pebbles", age: 1, active: false },
];
_.partition(users, function (o) {
return o.active;
});
// => objects for [['fred'], ['barney', 'pebbles']]
// 使用 `_.matches` 的迭代器简写
_.partition(users, { age: 1, active: false });
// => objects for [['pebbles'], ['barney', 'fred']]
// 使用 `_.matchesProperty` 的迭代器简写
_.partition(users, ["active", false]);
// => objects for [['barney', 'pebbles'], ['fred']]
// 使用 `_.property` 的迭代器简写
_.partition(users, "active");
// => objects for [['fred'], ['barney', 'pebbles']]_.reduce(collection, [iteratee=_.identity], [accumulator])
引入版本 0.1.0
将 collection(集合)归约为一个值。这个值是通过 iteratee(迭代函数)遍历 collection 中的每个元素,将每次调用的结果累积起来得到的。如果不提供 accumulator(累加器/初始值),则使用 collection 的第一个元素作为初始值。
iteratee 调用时会传入四个参数:(accumulator, value, index|key, collection)。
参数
- collection
(Array|Object): 待遍历的集合。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。 - [accumulator]
(*): 初始值。
返回
- (*): 返回累积的值。
示例
_.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'] } (不保证迭代顺序)_.reduceRight(collection, [iteratee=_.identity], [accumulator])
引入版本 0.1.0
这个方法类似 _.reduce,区别在于它是从右到左(即反向)遍历 collection(集合)中的元素。
参数
- collection
(Array|Object): 待遍历的集合。 - [iteratee=_.identity]
(Function): 每次迭代调用的函数。 - [accumulator]
(*): 初始值。
返回
- (*): 返回累积的值。
示例
var array = [
[0, 1],
[2, 3],
[4, 5],
];
_.reduceRight(
array,
function (flattened, other) {
return flattened.concat(other);
},
[]
);
// => [4, 5, 2, 3, 0, 1]_.reject(collection, [predicate=_.identity])
引入版本 0.1.0
_.filter 的反向操作;此方法返回 collection(集合)中 predicate(断言函数)不 返回真值(truthy)的元素。(即排除掉符合条件的元素)。
参数
- collection
(Array|Object): 待遍历的集合。 - [predicate=_.identity]
(Function): 每次迭代调用的函数。
返回
- (Array): 返回过滤后的新数组。
示例
var users = [
{ user: "barney", age: 36, active: false },
{ user: "fred", age: 40, active: true },
];
_.reject(users, function (o) {
return !o.active;
});
// => objects for ['fred']
// 使用 `_.matches` 的迭代器简写
_.reject(users, { age: 40, active: true });
// => objects for ['barney']
// 使用 `_.matchesProperty` 的迭代器简写
_.reject(users, ["active", false]);
// => objects for ['fred']
// 使用 `_.property` 的迭代器简写
_.reject(users, "active");
// => objects for ['barney']_.sample(collection)
引入版本 2.0.0
从 collection(集合)中随机获取一个元素。
参数
- collection
(Array|Object): 要采样的集合。
返回
- (*): 返回随机元素。
示例
_.sample([1, 2, 3, 4]);
// => 2_.sampleSize(collection, [n=1])
引入版本 4.0.0
从 collection(集合)中获取 n 个随机元素。
参数
- collection
(Array|Object): 要采样的集合。 - [n=1]
(number): 要获取的元素个数。
返回
- (Array): 返回随机元素组成的数组。
示例
_.sampleSize([1, 2, 3], 2);
// => [3, 1]
_.sampleSize([1, 2, 3], 4);
// => [2, 3, 1]_.shuffle(collection)
引入版本 0.1.0
创建一个打乱顺序后的数组副本,使用洗牌算法的一个版本。
参数
- collection
(Array|Object): 要打乱顺序的集合。
返回
- (Array): 返回打乱顺序后的新数组。
示例
_.shuffle([1, 2, 3, 4]);
// => [4, 1, 3, 2]_.size(collection)
引入版本 0.1.0
获取 collection(集合)的大小。对于数组或类数组对象,返回其长度;对于对象,返回其自身可枚举属性的个数。
参数
- collection
(Array|Object|string): 待检查的集合。
返回
- (number): 返回集合的大小。
示例
_.size([1, 2, 3]);
// => 3
_.size({ a: 1, b: 2 });
// => 2
_.size("pebbles");
// => 7_.some(collection, [predicate=_.identity])
引入版本 0.1.0
检查 collection(集合)中是否 存在 任意元素通过了 predicate(断言函数)的真值检查。一旦 predicate 返回真值,遍历就会立即停止。
predicate 调用时会传入三个参数:(value, index|key, collection)。
参数
- collection
(Array|Object): 待遍历的集合。 - [predicate=_.identity]
(Function): 每次迭代调用的函数。
返回
- (boolean): 如果任意元素通过断言检测返回
true,否则返回false。
示例
_.some([null, 0, "yes", false], Boolean);
// => true
var users = [
{ user: "barney", active: true },
{ user: "fred", active: false },
];
// 使用 `_.matches` 的迭代器简写
_.some(users, { user: "barney", active: false });
// => false
// 使用 `_.matchesProperty` 的迭代器简写
_.some(users, ["active", false]);
// => true
// 使用 `_.property` 的迭代器简写
_.some(users, "active");
// => true_.sortBy(collection, [iteratees=[_.identity]])
引入版本 0.1.0
创建一个元素数组。通过 iteratee(迭代函数)遍历集合中的每个元素,根据返回的结果进行 升序 排序。这个方法执行 稳定排序(stable sort),即它会保留相等元素在原数组中的相对顺序。
iteratee 调用时会传入一个参数:(value)。
参数
- collection
(Array|Object): 待遍历的集合。 - [iteratees=[_.identity]]
(...(Function|Function[])): 排序的依据(可以是函数或属性名)。
返回
- (Array): 返回排序后的新数组。
示例
var users = [
{ user: "fred", age: 48 },
{ user: "barney", age: 36 },
{ user: "fred", age: 40 },
{ user: "barney", age: 34 },
];
_.sortBy(users, [
function (o) {
return o.user;
},
]);
// => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
_.sortBy(users, ["user", "age"]);
// => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]