内容简介:由于 Lodash 是一个非常强大的工具类,提供了非常多的工具方法,所以这里仅仅罗列一部分常用的方法,供大家参考。如果想了解更全的,建议到官网去仔细过一遍,学习一下:数组去重,返回一个去重后的新数组。
由于 Lodash 是一个非常强大的 工具 类,提供了非常多的工具方法,所以这里仅仅罗列一部分常用的方法,供大家参考。
如果想了解更全的,建议到官网去仔细过一遍,学习一下: www.lodashjs.com/docs/latest ,以备不时之需。
Array 数组
_.uniq
数组去重,返回一个去重后的新数组。
参数:
- Array,数组
示例:
_.uniq([2, 1, 2]); // => [2, 1] 复制代码
_.uniqBy
这个方法类似 _.uniq
,不过可以接收一个回调函数,数组中每一个值会调用一遍回调函数,之后再去重。
参数:
- Array,数组
- callback,回调函数,传入参数:value
示例:
// 数组每一个元素向下取整后比较去重 _.uniqBy([2.1, 1.2, 2.3], Math.floor); // => [2.1, 1.2] // 取得对象中每个x的值进行比较去重 _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], value => value.x); // => [{ 'x': 1 }, { 'x': 2 }] 复制代码
_.uniqWith
这个方法类似 _.uniq
,不过可以接收一个回调函数,回调函数会传入要不比较的2个对象值,比较结果按函数的结果来执行。
参数:
- Array,数组
- callback,回调函数,传入2个参数:当前值 和 其它待比较值
示例:
var objects = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 1, 'y': 6 }]; _.uniqWith(objects, (arrVal, othVal) => { return arrVal.x === othVal.x; }); // [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }] 复制代码
Object 对象
_.pick
创建一个从 object
中选中的 key
的对象。
参数:
- Object,对象
- Keys,对象的key的数组
示例:
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pick(object, ['a', 'c']); // => { 'a': 1, 'c': 3 } 复制代码
_.pickBy
创建一个从 object
中经 value
函数判断为真值的属性为对象。
参数:
- Object,对象
- Function(value),判断函数,参数为每一个value
示例:
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.pickBy(object, (value) => {return _.isNumber(value)}; // => { 'a': 1, 'c': 3 } 复制代码
_.omit
反向版 pick
, 返回忽略 key
之外的自身和继承的可枚举属性。
参数:
- Object,对象
- Keys,对象的key的数组
示例:
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.omit(object, ['a', 'c']); // => { 'b': '2' } 复制代码
_.omitBy
反向版 pickBy
,创建一个不是从 object
中经 value
函数判断为真值的对象。
参数:
- Object,对象
- Function(value),判断函数,参数为每一个value
示例:
var object = { 'a': 1, 'b': '2', 'c': 3 }; _.omitBy(object, value => {return _.isNumber(value)}; // => { 'b': '2' } 复制代码
_.mapValues
遍历所有的 value
,返回处理后的对象。
参数:
-
Object,对象
-
Function(value, key, object),判断函数
示例:
var users = { 'fred': { 'user': 'fred', 'age': 40 }, 'pebbles': { 'user': 'pebbles', 'age': 1 } }; _.mapValues(users, value => { return value.age; }); // => { 'fred': 40, 'pebbles': 1 } (无法保证遍历的顺序) 复制代码
_.mapKeys
反向版 _.mapValues
。 遍历所有的 key
,返回处理后的对象,返回对象的value跟处理前一样。
参数:
-
Object,对象
-
Function(value, key, object),判断函数
示例:
_.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { return key + value; }); // => { 'a1': 1, 'b2': 2 } 复制代码
_.merge
合并对象,注意几个细节:
- 合并来源中,如果属性值为 undefined ,会忽略,不会覆盖原有值;
- 数组和普通对象会递归合并,也就是:求并集。其它对象,会直接覆盖原对象;
- 支持多个目标源,也就是参数可以无限制(...sources)
参数:
- Object,对象
- sources,...Object 可以传多个合并源
示例:
var users = { 'data': [{ 'user': 'barney' }, { 'user': 'fred' }] }; var ages = { 'data': [{ 'age': 36 }, { 'age': 40 }] }; _.merge(users, ages); // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] } 复制代码
_.findKey
这个方法类似 _.find
,只是返回的是 key
。还有个 findLastKey
,不过是反向遍历对象。
这个方法主要用于的场景:后台返回的List,我们需要过滤后得到指定的所有key。
参数:
- Object,对象
- callback,回调函数
示例:
var users = { 'barney': { 'age': 36, 'active': true }, 'fred': { 'age': 40, 'active': false }, 'pebbles': { 'age': 1, 'active': true } }; _.findKey(users, function(o) { return o.age < 40; }); // => 'barney' (无法保证遍历的顺序) // 使用了 `_.matches` 的回调结果 _.findKey(users, { 'age': 1, 'active': true }); // => 'pebbles' // 使用了 `_.matchesProperty` 的回调结果 _.findKey(users, ['active', false]); // => 'fred' // 使用了 `_.property` 的回调结果 _.findKey(users, 'active'); // => 'barney' 复制代码
Collection 集合
注意:Collection 模块表示 Object 或 Array 都支持
_.map
创建一个经过 回调函数处理的集合中每一个元素的结果数组。
参数:
- collection,集合
- callback,回调函数
示例:
function square(n) { return n * n; } // 遍历数组 _.map([4, 8], square); // => [16, 64] // 遍历对象 _.map({ 'a': 4, 'b': 8 }, square); // => [16, 64] (无法保证遍历的顺序) 复制代码
_.includes
检查 值 是否在 集合中,如果集合是字符串,那么检查 值 是否在字符串中。
参数:
- collection,集合
- value,要检查的值
- fromIndex,要检索的位置
示例:
// 集合中是否包含1 _.includes([1, 2, 3], 1); // => true // 集合下标为2的位置是否等于1 _.includes([1, 2, 3], 1, 2); // => false // 对象中是否包含value=fred _.includes({ 'user': 'fred', 'age': 40 }, 'fred'); // => true // 字符串中是否包含 eb 这2个连续的字母 _.includes('pebbles', 'eb'); // => true 复制代码
Util 工具
_.property
返回指定对象的 key
的值的数组,支持多层属性嵌套获取,如: obj.x.y.z
参数:
obj.x.y.z
示例:
var objects = [ { 'a': { 'b': { 'c': 2 } } }, { 'a': { 'b': { 'c': 1 } } } ]; _.map(objects, _.property('a.b.c')); // => [2, 1] 复制代码
_.cloneDeep
递归拷贝对象,对应的 _.clone
是浅拷贝。
参数:
- Object,被拷贝对象
示例:
var objects = [{ 'a': 1 }, { 'b': 2 }]; var deep = _.cloneDeep(objects); // 深拷贝后数组中的对象已经不是同一个 console.log(deep[0] === objects[0]); // => false 复制代码
_.isArray
检查 value
是否是 Array
类对象。
参数:
- value,要检查的对象
示例:
_.isArray([1, 2, 3]); // => true _.isArray(document.body.children); // => false _.isArray('abc'); // => false _.isArray(_.noop); // => false 复制代码
_.isEmpty
检查 value
是否为空。
注意:该方法主要适用于Collection 或 Object,尤其不适用于Number、Boolean等值,下面会详细说明。
参数:
- value,要检查的对象
示例:
_.isEmpty(null); // => true _.isEmpty(undefined); // => true _.isEmpty([]); // => true _.isEmpty({}); // => true _.isEmpty(""); // => true _.isEmpty([1, 2, 3]); // => false _.isEmpty({ 'a': 1 }); // => false 复制代码
注意以下特殊示例(Boolean 和 Number):
关于这是不是个bug,可以看下讨论区: github.com/lodash/loda…
_.isEmpty(true); // => true _.isEmpty(false); // => true _.isEmpty(123); // => true 复制代码
由于 isEmpty 不能有效判断 Boolean 和 Number ,所以,使用这个函数的需要特别小心,最好自己再封装一个函数,做下容错。
比如,你只考虑如下场景,那么自己封装一下:
function isEmpty(value) { return _.isEqual(a, {}) || _.isEqual(a, []) || _.isEqual(a, '') || _.isEqual(a, null) || _.isEqual(a, undefined); } 复制代码
如果不确定自己的数据类型,那么就不推荐使用 _.isEmpty
这个函数。
Function 函数
_.throttle
节流函数,控制操作频次,在 wait
秒内最多执行 func
一次的函数。
注意:这里 最多
的意思其实隐含说明了js里面事件轮循的一个问题,可能会受执行栈影响而导致不能在 settimeout
时间内执行。
参数:
-
func,(Function) 要节流的函数
-
[wait=0],(number) 需要节流的毫秒
-
[options],(Object) 选项对象
-
leading,默认true,动作开始时,立即执行一次func
-
trailing,默认true,动作结束时,再等待wait时间后,再执行一次func
-
示例:
// 避免在滚动时过分的更新定位 jQuery(window).on('scroll', _.throttle(updatePosition, 100)); // 点击后就调用 `renewToken`,但5分钟内超过1次。 var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); jQuery(element).on('click', throttled); // 取消一个 trailing 的节流调用 jQuery(window).on('popstate', throttled.cancel); 复制代码
注意事项:
// 错误 jQuery(window).on('scroll', function() { _.debounce(doSomething, 300); }); // 正确 jQuery(window).on('scroll', _.debounce(doSomething, 200)); 复制代码
_.debounce
n. 防反跳 按键防反跳(Debounce)为什么要去抖动呢?机械按键在按下时,并非按下就接触的很好,尤其是有簧片的机械开关,会在接触的瞬间反复的开合多次,直到开关状态完全改变。
创建一个防抖动函数。 该函数会在 wait
毫秒后调用 func
方法。
参数:
-
func,(Function) 要节流的函数
-
[wait=0],(number) 需要节流的毫秒
-
[options],(Object) 选项对象
-
leading,默认false,动作开始时,立即执行一次func
-
trailing,默认true,动作结束时,再等待wait时间后,再执行一次func
-
maxWait,最大等待时间(比如:设置一个动作结束2秒后执行func,但是这个动作一直不结束,那么func就永远不会执行,maxWait就是保证你等待这个动作的最长时间,否则就立即执行一次。)
-
示例:
// 避免窗口在变动时出现昂贵的计算开销。 jQuery(window).on('resize', _.debounce(calculateLayout, 150)); // 当点击时 `sendMail` 随后就被调用。 jQuery(element).on('click', _.debounce(sendMail, 300, { 'leading': true, 'trailing': false })); // 确保 `batchLog` 调用1次之后,1秒内会被触发。 var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); var source = new EventSource('/stream'); jQuery(source).on('message', debounced); // 取消一个 trailing 的防抖动调用 jQuery(window).on('popstate', debounced.cancel); 复制代码
参考资料
以上所述就是小编给大家介绍的《Lodash 常用方法说明之抛砖引玉》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。