官网:最新版地址 链接
本文将整理常用的,案例也是官网的,只是自己再实战演练一下。所以到此,客官可以戳上面链接进入官网。当然,如果你看着官网,方法真的多,感觉很蒙的话,就把我整理的常用的先看看吧。有时候真的要多看看大佬写的代码,lodash.js也是我看大佬用过一次才知道的。
1)CDN 链接
2)NPM
npm i --save lodash
var _ = require('lodash'); // 全局引用
var array = require('lodash/array'); //按需
var object = require('lodash/fp/object');
cdn也有按需引入,官网有
官网定义
将数组(array)拆分成多个 size 长度的区块,并将这些区块组成一个新数组。 如果array 无法被分割成全部等长的区块,那么最后剩余的元素将组成一个区块。
const a =_.chunk(['a', 'b', 'c', 'd'], 2);
console.log(a) // [['a', 'b'], ['c', 'd']] // size=2
官网定义
根据 depth 递归减少 array 的嵌套层级
const i = [1, [2, [3, [4]], 5]];
const j = _.flattenDepth(i, 1);
console.log(j) // [1, 2, [3, [4]], 5]
const k = _.flattenDepth(i, 2);
console.log(k) // [1, 2, 3, [4], 5]
官网定义
创建一个新数组,包含原数组中所有的非假值元素。例如false, null, 0, “”, undefined, 和 NaN 都是被认为是“假值”。
const b =_.compact([0, 1, false, 2, '', 3]);
console.log(b) // [1, 2, 3]
官网定义
创建一个新数组,将array与任何数组 或 值连接在一起。
const c = [1];
var d = _.concat(c, 2, [3], [[4]]);
console.log(d) // [ 1, 2, 3, [ 4 ] ]
官网定义
创建一个具有唯一array值的数组,每个值不包含在其他给定的数组【values】中
const e = _.difference([3, 2, 1], [4, 2]);
console.log(e) // [3, 1]
官网定义
返回第一个通过 predicate 判断为真值的元素的索引值(index
),而不是元素本身
const f = [
{ 'user': 'barney', 'active': false },
{ 'user': 'fred', 'active': false },
{ 'user': 'pebbles', 'active': true }
];
const g = _.findIndex(f, function(o) { return o.user == 'barney'; });
console.log(g) // 0
const h = _.findIndex(f, { 'user': 'fred', 'active': false });
console.log(h) // 1
官网定义
创建一个去重后的array数组副本。只有第一次出现的元素才会被保留。
const l =_.uniq([2, 1, 2]);
console.log(l) // [2, 1]
官网定义
创建一个分组元素的数组,数组的第一个元素包含所有给定数组的第一个元素,数组的第二个元素包含所有给定数组的第二个元素,以此类推。
const m=_.zip(['fred', 'barney'], [30, 40], [true, false]);
console.log(m) // [['fred', 30, true], ['barney', 40, false]]
_unzip
就是相反操作
官网定义
分配来源对象的可枚举属性到目标对象所有解析为 undefined 的属性上。 来源对象从左到右应用。 一旦设置了相同属性的值,后续的将被忽略掉。
const n=_.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
console.log(n) // { 'a': 1, 'b': 2 }
官网定义
这个方法类似 _.find 。 除了它返回最先被 predicate 判断为真值的元素 key,而不是元素本身。
const o = {
'barney': { 'age': 36, 'active': true },
'fred': { 'age': 40, 'active': false },
'pebbles': { 'age': 1, 'active': true }
};
const p = _.findKey(o, function(o) { return o.age < 40; });
console.log(p) // 'barney' (iteration order is not guaranteed)
官网定义
除了它递归合并 sources 来源对象自身和继承的可枚举属性到 object 目标对象。如果目标值存在,被解析为undefined的sources 来源对象属性将被跳过。数组和普通对象会递归合并,其他对象和值会被直接分配覆盖。源对象从从左到右分配。后续的来源对象属性会覆盖之前分配的属性。
const r = {
'a': [{ 'b': 2 }, { 'd': 4 }]
};
const s = {
'a': [{ 'c': 3 }, { 'e': 5 }]
};
const t =_.merge(r, s);
console.log(t) // { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
官网定义
创建一个从 object 中选中的属性的对象。
const u = { 'a': 1, 'b': '2', 'c': 3 };
const v =_.pick(u, ['a', 'c']);
console.log(v) // { 'a': 1, 'c': 3 }
_.omit
(object, [props]) 与_pick() 是反的 {‘b’:‘2’}
官网定义
检查 value(值) 是否在 collection(集合) 中。如果 collection(集合)是一个字符串,那么检查 value(值,子字符串) 是否在字符串中, 否则使用 SameValueZero 做等值比较。 如果指定 fromIndex 是负数,那么从 collection(集合) 的结尾开始检索。
const w = _.includes([1, 2, 3], 1);
console.log(w) // true
const x = _.includes([1, 2, 3], 1, 2);
console.log(x) // false
官网定义
创建一个数组, value(值) 是 iteratee(迭代函数)遍历 collection(集合)中的每个元素后返回的结果。 iteratee(迭代函数)调用3个参数:
(value, index|key, collection).
function square(n) {
return n * n;
}
const y = _.map([4, 8], square);
console.log(y) // [16, 64]
const aa = _.map({ 'a': 4, 'b': 8 }, square);
console.log(aa) // [16, 64]
const ab = [
{ 'user': 'barney' },
{ 'user': 'fred' }
];
const ac = _.map(ab, 'user');
console.log(ac) // ['barney', 'fred']
官网定义
创建一个 value 的浅拷贝。
const ad = [{ 'a': 1 }, { 'b': 2 }];
const ae = _.clone(ad);
console.log(ad[0] === ae[0]); // true 地址指针一样
官网定义
深拷贝
const af = [{ 'a': 1 }, { 'b': 2 }];
const ag = _.clone(ad);
console.log(af[0] === ag[0]); // false 地址指针不一样
官网定义
创建一个 debounced(防抖动)函数,该函数会从上一次被调用后,延迟 wait 毫秒后调用 func 方法。 debounced(防抖动)函数提供一个 cancel 方法取消延迟的函数调用以及 flush 方法立即调用。 可以提供一个 options(选项) 对象决定如何调用 func 方法,options.leading 与|或 options.trailing 决定延迟前后如何触发(是 先调用后等待 还是 先等待后调用)。 func 调用时会传入最后一次提供给 debounced(防抖动)函数 的参数。 后续调用的 debounced(防抖动)函数返回是最后一次 func 调用的结果。
// 避免窗口在变动时出现昂贵的计算开销。
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);
官网定义
创建一个节流函数,在 wait 秒内最多执行 func 一次的函数。 该函数提供一个 cancel 方法取消延迟的函数调用以及 flush 方法立即调用。 可以提供一个 options 对象决定如何调用 func 方法, options.leading 与|或 options.trailing 决定 wait 前后如何触发。 func 会传入最后一次传入的参数给这个函数。 随后调用的函数返回是最后一次 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);