lodash
常用方法汇总引入: import _ from 'lodash'
官方中文文档:https://www.lodashjs.com/
_.get (object, path, [defaultValue])
说明:
根据 object对象的path路径获取值。 如果解析 value 是 undefined 会以 defaultValue 取代。
参数
object
(Object): 要检索的对象。path
(Array|string): 要获取属性的路径。[defaultValue]
(*): 如果解析值是 undefined
,这值会被返回。返回
(*): 返回解析的值。
示例:
var object = { 'a': [{ 'b': { 'c': 3 } }] };
_.get(object, 'a[0].b.c'); // => 3
_.get(object, 'a.b.c', 'default'); // => 'default'
_.forIn (object, [iteratee=_.identity])
说明:
使用 iteratee
遍历对象的自身和继承的可枚举属性。 iteratee
会传入3个参数:(value, key, object)。 如果返回 false
,iteratee
会 提前退出遍历。
参数:
object
(Object): 要遍历的对象。[iteratee=_.identity]
(Function): 每次迭代时调用的函数。返回:
(Object): 返回 object
。
function Foo() {
this.a = 1;
this.b = 2;
}
Foo.prototype.c = 3;
_.forIn(new Foo, function(value, key) {
console.log(key);
});
// => Logs 'a', 'b', then 'c' (无法保证遍历的顺序)。
_.chunk (array, [size=1])
说明:
将数组(array)拆分成多个 size
长度的区块,并将这些区块组成一个新数组。 如果array
无法被分割成全部等长的区块,那么最后剩余的元 素将组成一个区块。
参数:
array
(Array): 需要处理的数组[size=1]
(number): 每个数组区块的长度返回:
(Array): 返回一个包含拆分区块的新数组(注:相当于一个二维数组)。
_.chunk(['a', 'b', 'c', 'd'], 2);// => [['a', 'b'], ['c', 'd']]
_.chunk(['a', 'b', 'c', 'd'], 3);// => [['a', 'b', 'c'], ['d']]
_.difference (array, [values])
说明:
创建一个具有唯一array
值的数组,每个值不包含在其他给定的数组中。(注:即创建一个新数组,这个数组中的值,为第一个数字(array
参数)排除了给定数组中的值。)该方法使用SameValueZero
做相等比较。结果值的顺序是由第一个数组中的顺序确定。
注意: 不像_.pullAll
,这个方法会返回一个新数组。
参数:
array
(Array): 要检查的数组。[values]
(…Array): 排除的值。返回值:
(Array): 返回一个过滤值后的新数组。
_.difference([3, 2, 1], [4, 2]);// => [3, 1]
_.intersection ([arrays])
说明:
创建唯一值的数组,这个数组包含所有给定数组都包含的元素,使用SameValueZero
进行相等性比较。(注:可以理解为给定数组的交集)
参数:
[arrays]
(…Array): 待检查的数组。返回值:
(Array): 返回一个包含所有传入数组交集元素的新数组。
_.intersection([2, 1], [4, 2], [1, 2]);// => [2]
_.union ([arrays])
说明:
创建一个按顺序排列的唯一值的数组。所有给定数组的元素值使用SameValueZero
做等值比较。(注: arrays
(数组)的并集,按顺序返回,返回数组的元素是唯一的)
参数:
[arrays]
(…Array): 要检查的数组。返回:
(Array): 返回一个新的联合数组。
_.union([2], [1, 2]);// => [2, 1]
_.uniq (array)
**说明: **创建一个去重后的array
数组副本。使用了SameValueZero
做等值比较。只有第一次出现的元素才会被保留。
参数:
array
(Array): 要检查的数组。返回:
(Array): 返回新的去重后的数组。
_.uniq([2, 1, 2]);// => [2, 1]
_.forEach (collection, [iteratee=_.identity])
说明:
调用 iteratee
遍历 collection
(集合) 中的每个元素, iteratee 调用3个参数: (value, index|key, collection)。 如果迭代函数(iteratee)显式 的返回 false
,迭代会提前退出。
参数:
collection
(Array|Object): 一个用来迭代的集合。[iteratee=_.identity]
(Function): 每次迭代调用的函数。返回:
(*): 返回集合 collection
。
注意:
与其他"集合"方法一样,类似于数组,对象的 “length” 属性也会被遍历。想避免这种情况,可以用_.forIn
或者_.forOwn
代替。
_([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).
_.orderBy (collection,[iteratees=[_.identity]],[orders])
说明:
此方法类似于_.sortBy
,除了它允许指定 iteratee(迭代函数)结果如何排序。 如果没指定 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]]
_.size (collection)
说明: 返回collection
(集合)的长度,如果集合是类数组或字符串,返回其 length ;如果集合是对象,返回其可枚举属性的个数。
参数:
collection
(Array|Object): 要检查的集合返回:
(number): 返回集合的长度。
_.size([1, 2, 3]);// => 3
_.size({ 'a': 1, 'b': 2 });// => 2
_.size('pebbles');// => 7
_.max (array)
说明: 计算 array
中的最大值。 如果 array
是 空的或者假值将会返回 undefined
。
_.max([4, 2, 8, 6]);
// => 8
_.max([]);
// => undefined
_.maxBy (array, [iteratee=_.identity])
说明: 这个方法类似_.max
除了它接受 iteratee
来调用 array
中的每一个元素,来生成其值排序的标准。 iteratee 会调用1个参数: (value) 。
参数:
array
(Array): 要迭代的数组。[iteratee=_.identity]
(Function): 调用每个元素的迭代函数。示例:
var objects = [{ 'n': 1 }, { 'n': 2 }];
_.maxBy(objects, function(o) { return o.n; });
// => { 'n': 2 }
// The `_.property` iteratee shorthand.
_.maxBy(objects, 'n');
// => { 'n': 2 }
_.round (number, [precision=0])
说明:根据 precision
(精度) 四舍五入 number
。
参数:
number
(number): 要四舍五入的数字。[precision=0]
(number): 四舍五入的精度。_.round(4.006);
// => 4
_.round(4.006, 2);
// => 4.01
_.round(4060, -2);
// => 4100
_.isEqual (value, other)
说明: 执行深比较来确定两者的值是否相等。
参数:
value
(*): 用来比较的值。other
(*): 另一个用来比较的值。返回:
(boolean): 如果 两个值完全相同,那么返回 true
,否则返回 false
。
var object = { 'a': 1 };
var other = { 'a': 1 };
_.isEqual(object, other);
// => true
object === other;
// => false
_.cloneDeep (value)
说明: 这个方法类似_.clone
,除了它会递归拷贝 value
。(注:也叫深拷贝)
参数:
value
(*): 要深拷贝的值。返回:
(*): 返回拷贝后的值。
var objects = [{ 'a': 1 }, { 'b': 2 }]; var deep = _.cloneDeep(objects);console.log(deep[0] === objects[0]);// => false
_.isEmpty (value)
说明:
检查 value
是否为一个空对象,集合,映射或者set。 判断的依据是除非是有枚举属性的对象,length 大于 0 的 arguments object, array, string 或类jquery选择器。
对象如果被认为为空,那么他们没有自己的可枚举属性的对象。
类数组值,比如arguments
对象,array,buffer,string或者类jQuery集合的length
为 0
,被认为是空。类似的,map(映射)和set 的size
为 0
,被认为是空。
参数:
value
(*): 要检查的值。返回:
(boolean): 如果 value
为空,那么返回 true
,否则返回 false
。
_.isEmpty(null);
// => true
_.isEmpty(true);
// => true
_.isEmpty(1);
// => true
_.isEmpty([1, 2, 3]);
// => false
_.isEmpty({ 'a': 1 });
// => false
_.range( [start=0], end, [step=1])
说明:
创建一个包含从 start
到 end
,但不包含 end
本身范围数字的数组。 如果 start
是负数,而 end
或 step
没有指定,那么 step
从 -1
为开始。 如果 end
没有指定,start
设置为 0
。 如果 end
小于 start
,会创建一个空数组,除非指定了 step
。
注意: JavaScript 遵循 IEEE-754 标准处理无法预料的浮点数结果。
[start=0]
(number): 开始的范围。end
(number): 结束的范围。[step=1]
(number): 范围的增量 或者 减量。返回:
(Array): 返回范围内数字组成的新数组。
_.range(4);
// => [0, 1, 2, 3]
_.range(-4);
// => [0, -1, -2, -3]
_.range(1, 5);
// => [1, 2, 3, 4]
_.range(0, 20, 5);
// => [0, 5, 10, 15]
_.range(0, -4, -1);
// => [0, -1, -2, -3]
_.range(1, 4, 0);
// => [1, 1, 1]
_.range(0);
// => []
_.truncate ([string=''], [options=])
说明:
截断string
字符串,如果字符串超出了限定的最大值。 被截断的字符串后面会以 omission 代替,omission 默认是 “…”。
(PS:截取指定长度后加… 用于处理标题过长再好不过)
参数:
[string='']
(string): 要截断的字符串。[options=]
(Object): 选项对象。[options.length=30]
(number): 允许的最大长度。[options.omission='...']
(string): 超出后的代替字符。[options.separator]
(RegExp|string): 截断点。返回: (string): Returns the truncated string.
_.truncate('hi-diddly-ho there, neighborino');
// => 'hi-diddly-ho there, neighbo...'
_.truncate('hi-diddly-ho there, neighborino', {
'length': 24,
'separator': ' '
});
// => 'hi-diddly-ho there,...'
_.truncate('hi-diddly-ho there, neighborino', {
'length': 24,
'separator': /,? +/
});
// => 'hi-diddly-ho there...'
_.truncate('hi-diddly-ho there, neighborino', {
'omission': ' [...]'
});
// => 'hi-diddly-ho there, neig [...]'
_.isFunction (value)
说明: 检查 value
是否是 Function
对象。
参数:
value
(*): 要检查的值返回:
(boolean): 如果 value
是一个函数,那么返回 true
,否则返回 false
。
_.isFunction(_);
// => true
_.isFunction(/abc/);
// => false