loadsh 常用方法

April 11, 2018

Reading time ~4 minutes

这篇文章仅仅是为了方便记忆,并不是只要知道这些就可以了

Array

_.compact(array)

创建一个新数组,包含原数组中所有的非假值元素。例如false, null, 0, “”, undefined, 和 NaN 都是被认为是“假值”
清空数组的无效值的时候会用到

_.flattenDeep(array)

将array递归为一维数组。

_.union([arrays])

创建一个按顺序排列的唯一值的数组。所有给定数组的元素值使用SameValueZero做等值比较。(愚人码头注: arrays(数组)的并集,按顺序返回,返回数组的元素是唯一的) 用于多个数组合并

  • _.uniq(array) 对一个数组去重
  • _.xor([arrays]) 取多个数组的交集

    _.zipWith([arrays], [iteratee=_.identity])

    这个方法类似于_.zip,不同之处在于它接受一个 iteratee(迭代函数),来 指定分组的值应该如何被组合。 该iteratee调用每个组的元素: (…group).

    1
    2
    3
    4
    
    _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
      return a + b + c;
    });
    // => [111, 222]
    

    Collection

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

    创建一个组成对象,key(键)是经过 iteratee(迭代函数) 执行处理collection中每个元素后返回的结果,每个key(键)对应的值是 iteratee(迭代函数)返回该key(键)的次数(愚人码头注:迭代次数)。 iteratee 调用一个参数:(value)。 ``` _.countBy([6.1, 4.2, 6.3], Math.floor); // => { ‘4’: 1, ‘6’: 2 }

// The _.property iteratee shorthand. _.countBy([‘one’, ‘two’, ‘three’], ‘length’); // => { ‘3’: 2, ‘5’: 1 }

1
2
3
4
5
6
#### [`_.every(collection, [predicate=_.identity])`](http://www.css88.com/doc/lodash/#_everycollection-predicate_identity)
通过 predicate(断言函数) 检查 collection(集合)中的 所有 元素是否都返回真值。一旦 predicate(断言函数) 返回假值,迭代就马上停止。predicate(断言函数)调用三个参数: (value, index|key, collection)。    
用于检查某个数组是否完全符合条件

#### [`_.groupBy(collection, [iteratee=_.identity])`](http://www.css88.com/doc/lodash/#_groupbycollection-iteratee_identity)
创建一个对象,key 是 iteratee 遍历 collection(集合) 中的每个元素返回的结果。 分组值的顺序是由他们出现在 collection(集合) 中的顺序确定的。每个键对应的值负责生成 key 的元素组成的数组。iteratee 调用 1 个参数: (value)。

_.groupBy([6.1, 4.2, 6.3], Math.floor); // => { ‘4’: [4.2], ‘6’: [6.1, 6.3] }

// The _.property iteratee shorthand. _.groupBy([‘one’, ‘two’, ‘three’], ‘length’); // => { ‘3’: [‘one’, ‘two’], ‘5’: [‘three’] }

1
2
#### [`_.includes(collection, value, [fromIndex=0])`](http://www.css88.com/doc/lodash/#_includescollection-value-fromindex0)
检查 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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#### [`_.partition(collection, [predicate=_.identity])`](http://www.css88.com/doc/lodash/#_partitioncollection-predicate_identity)
创建一个分成两组的元素数组,第一组包含predicate(断言函数)返回为 truthy(真值)的元素,第二组包含predicate(断言函数)返回为 falsey(假值)的元素。predicate 调用1个参数:(value)。   
用于把数组一分为二
## function
#### [`_.curry(func, [arity=func.length])`](http://www.css88.com/doc/lodash/#_curryfunc-arityfunclength)
创建一个函数,该函数接收 func 的参数,要么调用func返回的结果,如果 func 所需参数已经提供,则直接返回 func 所执行的结果。或返回一个函数,接受余下的func 参数的函数,可以使用 func.length 强制需要累积的参数个数。    
**函数式编程,懂!**
#### [`_.debounce(func, [wait=0], [options={}])`](http://www.css88.com/doc/lodash/#_debouncefunc-wait0-options)
  创建一个 debounced(防抖动)函数,该函数会从上一次被调用后,延迟 wait 毫秒后调用 func 方法。 debounced(防抖动)函数提供一个 cancel 方法取消延迟的函数调用以及 flush 方法立即调用。 可以提供一个 options(选项) 对象决定如何调用 func 方法,options.leading 与|或 options.trailing 决定延迟前后如何触发(愚人码头注:是 先调用后等待 还是 先等待后调用)。 func 调用时会传入最后一次提供给 debounced(防抖动)函数 的参数。 后续调用的 debounced(防抖动)函数返回是最后一次 func 调用的结果。

注意: 如果 leading 和 trailing 选项为 true, 则 func 允许 trailing 方式调用的条件为: 在 wait 期间多次调用防抖方法。

如果 wait 为 0 并且 leading 为 false, func调用将被推迟到下一个点,类似setTimeout为0的超时。      
**滚轮和鼠标事件触发太频繁,用这个吧!**    
#### [`_.rearg(func, indexes)`](http://www.css88.com/doc/lodash/#_reargfunc-indexes)
创建一个函数,调用func时,根据指定的 indexes 调整对应位置参数。其中第一个索引值是对应第一个参数,第二个索引值是作为第二个参数,依此类推。

var rearged = _.rearg(function(a, b, c) { return [a, b, c]; }, [2, 0, 1]);

rearged(‘b’, ‘c’, ‘a’) // => [‘a’, ‘b’, ‘c’]

1
2
3
4
5
6
7
8
9
10
11
## Lang
#### [`_.cloneDeep(value)`](http://www.css88.com/doc/lodash/#_clonedeepvalue)
它会递归拷贝 value。(愚人码头注:也叫深拷贝)。
#### [`_.isEmpty(value)`](http://www.css88.com/doc/lodash/#_isemptyvalue)
检查 value 是否为一个空对象,集合,映射或者set。 判断的依据是除非是有枚举属性的对象,length 大于 0 的 arguments object, array, string 或类jquery选择器
## Number
#### [`_.random([lower=0], [upper=1], [floating])`](http://www.css88.com/doc/lodash/#_randomlower0-upper1-floating)
产生一个包括 lower 与 upper 之间的数。 如果只提供一个参数返回一个0到提供数之间的数。 如果 floating 设为 true,或者 lower 或 upper 是浮点数,结果返回浮点数。
## Object
#### [`_.at(object, [paths])`](http://www.css88.com/doc/lodash/#_atobject-paths)
http://www.css88.com/doc/lodash/#_atobject-paths

var object = { ‘a’: [{ ‘b’: { ‘c’: 3 } }, 4] };

_.at(object, [‘a[0].b.c’, ‘a[1]’]); // => [3, 4]

1
2
3
把 object 中的值转换为数组
#### [`_.functions(object)`](http://www.css88.com/doc/lodash/#_functionsobject)
创建一个函数属性名称的数组,函数属性名称来自object对象自身可枚举属性。

function Foo() { this.a = _.constant(‘a’); this.b = _.constant(‘b’); }

Foo.prototype.c = _.constant(‘c’);

_.functions(new Foo); // => [‘a’, ‘b’]

1
2
3
4
5
· [`_.functionsIn(object)`](http://www.css88.com/doc/lodash/#_functionsinobject) 获取包括原型链上的方法
#### [`_.hasIn(object, path)`](http://www.css88.com/doc/lodash/#_hasinobject-path)
检查 path 是否是object对象的直接或继承属性。
#### [`_.omit(object, [props])`](http://www.css88.com/doc/lodash/#_omitobject-props)
删除object对象的属性

var object = { ‘a’: 1, ‘b’: ‘2’, ‘c’: 3 };

_.omit(object, [‘a’, ‘c’]); // => { ‘b’: ‘2’ }

1
2
3
4
5
6
7
8
9
10
11
- [`_.pick(object, [props])`](http://www.css88.com/doc/lodash/#_pickobject-props) 提取 object 中的属性
- [`_.unset(object, path)`](http://www.css88.com/doc/lodash/#_unsetobject-path) 移除object对象 path 路径上的属性。 (**改变原对象**)   
## Util
#### [`_.attempt(func, [args])`](http://www.css88.com/doc/lodash/#_attemptfunc-args)
尝试调用func,返回结果 或者 捕捉错误对象。任何附加的参数都会在调用时传给func。
#### [`_.constant(value)`](http://www.css88.com/doc/lodash/#_constantvalue)
创建一个返回 value 的函数。
#### [`_.flow([funcs])`](http://www.css88.com/doc/lodash/#_flowfuncs)
创建一个函数。 返回的结果是调用提供函数的结果,this 会绑定到创建函数。 每一个连续调用,传入的参数都是前一个函数返回的结果。
#### [`_.iteratee([func=_.identity])`](http://www.css88.com/doc/lodash/#_iterateefunc_identity)
创建一个函数,通过创建函数的参数调用 func 函数。 如果 func 是一个属性名,传入包含这个属性名的对象,回调返回对应属性名的值。 如果 func 是一个对象,传入的元素有相同的对象属性,回调返回 true 。 其他情况返回 false 。

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

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

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

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

// Create custom iteratee shorthands. .iteratee = _.wrap(.iteratee, function(iteratee, func) { return !_.isRegExp(func) ? iteratee(func) : function(string) { return func.test(string); }; });

_.filter([‘abc’, ‘def’], /ef/); // => [‘def’]

1
2
3
#### [`_.overEvery([predicates=[_.identity]])`](http://www.css88.com/doc/lodash/#_overeverypredicates_identity)
建一个函数,传入提供的参数的函数并调用 predicates 判断是否 全部 都为真值。

var func = _.overEvery([Boolean, isFinite]);

func(‘1’); // => true

func(null); // => false

func(NaN); // => false

1
2
3
- [`_.overSome([predicates=[_.identity]])`](http://www.css88.com/doc/lodash/#_oversomepredicates_identity)  存在真值    
#### [`_.times(n, [iteratee=_.identity])`](http://www.css88.com/doc/lodash/#_timesn-iteratee_identity)
调用 iteratee n 次,每次调用返回的结果存入到数组中。 iteratee 调用入1个参数: (index)。

_.times(3, String); // => [‘0’, ‘1’, ‘2’]

_.times(4, _.constant(0)); // => [0, 0, 0, 0] ```