集合 Collection Methods

Lodash v4 集合的使用方法

_.countBy

创建一个由运行 collectioniteratee 的每个元素的结果生成的键组成的对象。 每个键对应的值是该键被 iteratee 返回的次数。 使用一个参数调用迭代对象:(value)

引入版本 0.5.0

source / npm package

参数:(collection, [iteratee=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 转换键的迭代器。

返回 (Object): 返回组合的聚合对象。

示例

js
_.countBy([6.1, 4.2, 6.3], Math.floor)
_.countBy(['one', 'two', 'three'], 'length')

_.every

检查 predicate 是否为 collectionall 元素返回真值。 一旦 predicate 返回 false,迭代就会停止。 谓词使用三个参数调用:(value, index|key, collection)

注意: 此方法为 空集合 返回 true,因为 一切都是真的 的空集合元素。

引入版本 0.1.0

source / npm package

参数:(collection, [predicate=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [predicate=_.identity] (Function): 每次迭代调用的函数。

返回:(boolean)

如果所有元素都通过谓词检查,则返回 true,否则返回 false

示例

js
_.every([true, 1, null, 'yes'], Boolean)
const users = [{ user: 'barney', age: 36, active: false }, { user: 'fred', age: 40, active: false }]
_.every(users, { user: 'barney', active: false })
_.every(users, ['active', false])
_.every(users, 'active')

_.filter

遍历collection的元素,返回所有元素的数组predicate返回truthy for。 谓词使用三个参数调用:(value, index|key, collection)

注意:_.remove 不同,此方法返回一个新数组。

引入版本 0.1.0

source / npm package

参数:(collection, [predicate=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [predicate=_.identity] (Function): 每次迭代调用的函数。

返回 (Array): 返回新的过滤数组。

示例

js
const users = [{ user: 'barney', age: 36, active: true }, { user: 'fred', age: 40, active: false }]
_.filter(users, (o) => {
  return !o.active
})
_.filter(users, { age: 36, active: true })
_.filter(users, ['active', false])
_.filter(users, 'active')

_.find

迭代collection的元素,返回第一个元素predicate返回truthy for。 谓词使用三个参数调用:(value, index|key, collection)

引入版本 0.1.0

source / npm package

参数:(collection, [predicate=_.identity], [fromIndex=0])

  1. collection (Array|Object): 要检查的集合。
  2. [predicate=_.identity] (Function): 每次迭代调用的函数。
  3. [fromIndex=0] (number): 要从中搜索的索引。

返回 (*): 返回匹配的元素,否则返回 undefined

示例

js
const users = [{ user: 'barney', age: 36, active: true }, { user: 'fred', age: 40, active: false }, { user: 'pebbles', age: 1, active: true }]
_.find(users, (o) => {
  return o.age < 40
})
_.find(users, { age: 1, active: true })
_.find(users, ['active', false])
_.find(users, 'active')

_.findLast

此方法类似于 _.find,只是它从右到左迭代 collection 的元素。

引入版本 2.0.0

source / npm package

参数:(collection, [predicate=_.identity], [fromIndex=collection.length-1])

  1. collection (Array|Object): 要检查的集合。
  2. [predicate=_.identity] (Function): 每次迭代调用的函数。
  3. [fromIndex=collection.length-1] (number): 要从中搜索的索引。

返回 (*): 返回匹配的元素,否则返回 undefined

示例

js
_.findLast([1, 2, 3, 4], (n) => {
  return n % 2 === 1
})

_.flatMap

通过运行 collectioniteratee 中的每个元素并展平映射的结果,创建一个展平的值数组。 使用三个参数调用迭代对象:(value, index|key, collection)

引入版本 4.0.0

source / npm package

参数:(collection, [iteratee=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 每次迭代调用的函数。

返回 (Array): 返回新的展平数组。

示例

js
function duplicate(n) {
  return [n, n]
}
_.flatMap([1, 2], duplicate)

_.flatMapDeep

此方法类似于 _.flatMap,只是它递归地展平映射的结果。

引入版本 4.7.0

source / npm package

参数:(collection, [iteratee=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 每次迭代调用的函数。

返回 (Array): 返回新的展平数组。

示例

js
function duplicate(n) {
  return [[[n, n]]]
}
_.flatMapDeep([1, 2], duplicate)

_.flatMapDepth

此方法类似于 _.flatMap,只是它递归地将映射结果展平到 depth 次。

引入版本 4.7.0

source / npm package

参数:(collection, [iteratee=_.identity], [depth=1])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 每次迭代调用的函数。
  3. [depth=1] (number): 最大递归深度。

返回 (Array): 返回新的展平数组。

示例

js
function duplicate(n) {
  return [[[n, n]]]
}
_.flatMapDepth([1, 2], duplicate, 2)

_.forEach

遍历 collection 的元素并为每个元素调用 iteratee。 使用三个参数调用迭代对象:(value, index|key, collection)。 Iteratee 函数可以通过显式返回 false 提前退出迭代。

注意: 与其他“集合”方法一样,具有“长度”属性的对象像数组一样被迭代。 要避免这种行为,请使用 _.forIn_.forOwn 用于对象迭代。

引入版本 0.1.0

source / npm package

Aliases

_.each

参数:(collection, [iteratee=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 每次迭代调用的函数。

返回 (*): 返回 collection.

示例

js
_.forEach([1, 2], (value) => {
  console.log(value)
})
_.forEach({ a: 1, b: 2 }, (value, key) => {
  console.log(key)
})

_.forEachRight

此方法类似于 _.forEach,只是它从右到左迭代 collection 的元素。

引入版本 2.0.0

source / npm package

Aliases

_.eachRight

参数:(collection, [iteratee=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 每次迭代调用的函数。

返回 (*): 返回 collection.

示例

js
_.forEachRight([1, 2], (value) => {
  console.log(value)
})

_.groupBy

创建一个由运行 collectioniteratee 的每个元素的结果生成的键组成的对象。 分组值的顺序由它们在“集合”中出现的顺序决定。 每个键对应的值是负责生成键的元素数组。 使用一个参数调用迭代对象:(value)

引入版本 0.1.0

source / npm package

参数:(collection, [iteratee=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 转换键的迭代器。

返回 (Object): 返回组合的聚合对象。

示例

js
_.groupBy([6.1, 4.2, 6.3], Math.floor)
_.groupBy(['one', 'two', 'three'], 'length')

_.includes

检查 value 是否在 collection 中。 如果 collection 是字符串,则检查 value 的子字符串,否则 SameValueZero 用于相等 比较。 如果 fromIndex 是负数,它被用作从 collection 末尾的偏移量。

引入版本 0.1.0

source / npm package

参数:(collection, value, [fromIndex=0])

  1. collection (Array|Object|string): 要检查的集合。
  2. value (*): The value to search for.
  3. [fromIndex=0] (number): 要从中搜索的索引。

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

示例

js
_.includes([1, 2, 3], 1)
_.includes([1, 2, 3], 1, 2)
_.includes({ a: 1, b: 2 }, 1)
_.includes('abcd', 'bc')

_.invokeMap

collection 中每个元素的 path 调用方法,返回每个调用方法的结果数组。 为每个调用的方法提供任何附加参数。 如果 path 是一个函数,它会被调用,并且 this 绑定到 collection 中的每个元素。

引入版本 4.0.0

source / npm package

参数:(collection, path, [args])

  1. collection (Array|Object): 要迭代的集合。
  2. path (Array|Function|string): 要调用的方法的路径或每次迭代调用的函数。
  3. [args] (...*): 调用每个方法的参数。

返回 (Array): 返回结果数组。

示例

js
_.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort')
_.invokeMap([123, 456], String.prototype.split, '')

_.keyBy

创建一个由运行 collectioniteratee 的每个元素的结果生成的键组成的对象。 每个键对应的值是负责生成键的最后一个元素。 使用一个参数调用迭代对象:(value)

引入版本 4.0.0

source / npm package

参数:(collection, [iteratee=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 转换键的迭代器。

返回 (Object): 返回组合的聚合对象。

示例

js
const array = [{ dir: 'left', code: 97 }, { dir: 'right', code: 100 }]
_.keyBy(array, (o) => {
  return String.fromCharCode(o.code)
})
_.keyBy(array, 'dir')

_.map

通过运行 collectioniteratee 中的每个元素来创建一个值数组。 使用三个参数调用 iteratee:(value, index|key, collection)

许多 lodash 方法被保护为像 _.every_.filter_.map_.mapValues_.reject_.some

受保护的方法是: ary, chunk, curry, curryRight, drop, dropRight, every, fill, invert, parseInt, random, range, rangeRight, repeat, sampleSize, slice, some, sortBy, split, take, takeRight, template, trim, trimEnd, trimStart, and words

引入版本 0.1.0

source / npm package

参数:(collection, [iteratee=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 每次迭代调用的函数。

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

示例

js
function square(n) {
  return n * n
}
_.map([4, 8], square)
_.map({ a: 4, b: 8 }, square)
const users = [{ user: 'barney' }, { user: 'fred' }]
_.map(users, 'user')

_.orderBy

这个方法类似于_sortBy,除了它允许指定要测试的排序顺序的重新工具。 否则,为相应值的降序指定“desc”或“asc”为升序排序。

引入版本 4.0.0

source / npm package

参数:(collection, [iteratees=[_.identity]], [orders])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratees=[_.identity]] (Array[]|Function[]|Object[]|string[]): 要排序的迭代器。
  3. [orders] (string[]): iteratees 的排序顺序。

返回 (Array): 返回新的排序数组。

示例

js
const users = [{ user: 'fred', age: 48 }, { user: 'barney', age: 34 }, { user: 'fred', age: 40 }, { user: 'barney', age: 36 }]
_.orderBy(users, ['user', 'age'], ['asc', 'desc'])

_.partition

创建一个元素数组,分成两组,第一组包含元素predicate返回真值,第二组包含元素predicate返回假值。 谓词用一个参数调用:(value)

引入版本 3.0.0

source / npm package

参数:(collection, [predicate=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [predicate=_.identity] (Function): 每次迭代调用的函数。

返回 (Array): 返回分组元素的数组。

示例

js
const users = [{ user: 'barney', age: 36, active: false }, { user: 'fred', age: 40, active: true }, { user: 'pebbles', age: 1, active: false }]
_.partition(users, (o) => {
  return o.active
})
_.partition(users, { age: 1, active: false })
_.partition(users, ['active', false])
_.partition(users, 'active')

_.reduce

collection 减少到一个值,该值是运行 collectioniteratee 中的每个元素的累积结果,其中每个连续调用都提供前一个的返回值。 如果 accumulator 没有给出,collection 的第一个元素被用作初始值。 使用四个参数调用 iteratee:(accumulator, value, index|key, collection)

许多 lodash 方法被保护为像 _.reduce_.reduceRight_.transform

受保护的方法是:assign, defaults, defaultsDeep, includes, merge, orderBy, sortBy

引入版本 0.1.0

source / npm package

参数:(collection, [iteratee=_.identity], [accumulator])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 每次迭代调用的函数。
  3. [accumulator] (*): 初始值。

返回 (*): 返回累计值。

示例

js
_.reduce([1, 2], (sum, n) => {
  return sum + n
}, 0)
_.reduce({ a: 1, b: 2, c: 1 }, (result, value, key) => {
  (result[value] || (result[value] = [])).push(key)
  return result
}, {})

_.reduceRight

此方法类似于 _.reduce,只是它从右到左迭代 collection 的元素。

引入版本 0.1.0

source / npm package

参数:(collection, [iteratee=_.identity], [accumulator])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratee=_.identity] (Function): 每次迭代调用的函数。
  3. [accumulator] (*): 初始值。

返回 (*): 返回累计值。

示例

js
const array = [[0, 1], [2, 3], [4, 5]]
_.reduceRight(array, (flattened, other) => {
  return flattened.concat(other)
}, [])

_.reject

_.filter 的反义词; 此方法返回 collection 的元素,predicate 返回 truthy。

引入版本 0.1.0

source / npm package

参数:(collection, [predicate=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [predicate=_.identity] (Function): 每次迭代调用的函数。

返回 (Array): 返回新的过滤数组。

示例

js
const users = [{ user: 'barney', age: 36, active: false }, { user: 'fred', age: 40, active: true }]
_.reject(users, (o) => {
  return !o.active
})
_.reject(users, { age: 40, active: true })
_.reject(users, ['active', false])
_.reject(users, 'active')

_.sample

collection 中获取一个随机元素。

引入版本 2.0.0

source / npm package

参数:(collection)

  1. collection (Array|Object): 要采样的集合。

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

示例

_.sampleSize

collection 中获取唯一键的 n 个随机元素,直到 collection 的大小。

引入版本 4.0.0

source / npm package

参数:(collection, [n=1])

  1. collection (Array|Object): 要采样的集合。
  2. [n=1] (number): 要采样的元素数。

返回 (Array): 返回随机元素。

示例

js
_.sampleSize([1, 2, 3], 2)
_.sampleSize([1, 2, 3], 4)

_.shuffle

使用 Fisher-Yates shuffle 的一个版本创建一个混洗值数组。

引入版本 0.1.0

source / npm package

参数:(collection)

  1. collection (Array|Object): 要洗牌的集合。

返回 (Array): 返回新的洗牌数组。

示例

_.size

通过返回类似数组的值的长度或对象自己的可枚举字符串键控属性的数量来获取collection的大小。

引入版本 0.1.0

source / npm package

参数:(collection)

  1. collection (Array|Object|string): 要检查的集合。

返回 (number): 返回集合大小。

示例

js
_.size([1, 2, 3])
_.size({ a: 1, b: 2 })
_.size('pebbles')

_.some

检查 predicate 是否为 collectionany 元素返回真值。 一旦“谓词”返回真值,迭代就会停止。 谓词使用三个参数调用:(value, index|key, collection)

引入版本 0.1.0

source / npm package

参数:(collection, [predicate=_.identity])

  1. collection (Array|Object): 要迭代的集合。
  2. [predicate=_.identity] (Function): 每次迭代调用的函数。

返回 (boolean): 如果任何元素通过谓词检查,则返回 true,否则返回 false

示例

js
_.some([null, 0, 'yes', false], Boolean)
const users = [{ user: 'barney', active: true }, { user: 'fred', active: false }]
_.some(users, { user: 'barney', active: false })
_.some(users, ['active', false])
_.some(users, 'active')

_.sortBy

创建一个元素数组,按通过每个迭代器运行集合中的每个元素的结果按升序排序。 此方法执行稳定排序,即保留相等元素的原始排序顺序。 使用一个参数调用迭代器:(value)

引入版本 0.1.0

source / npm package

参数:(collection, [iteratees=[_.identity]])

  1. collection (Array|Object): 要迭代的集合。
  2. [iteratees=[_.identity]] (...(Function|Function[])): 要排序的迭代器。

返回 (Array): 返回新的排序数组。

示例

js
const users = [{ user: 'fred', age: 48 }, { user: 'barney', age: 36 }, { user: 'fred', age: 40 }, { user: 'barney', age: 34 }]
_.sortBy(users, [function (o) {
  return o.user
}])
_.sortBy(users, ['user', 'age'])