Lodash是什么?探索这个强大的JavaScript工具库!

Lodash 是一个 JavaScript 实用工具库,提供了大量实用的函数来简化编程任务,如数据处理、函数编程和功能编程。

Lodash 是一个现代 JavaScript 实用工具库,它为开发者提供了大量实用的函数,用于处理数据操作、函数编程和实用功能,这个库在许多项目中被广泛使用,因为它的 API 设计优雅且一致,使得代码更加简洁和易于维护。

Lodash 的核心功能

lodash

Lodash 提供了超过 100 个实用函数,这些函数可以大致分为以下几类:

1、函数编程(Functional Programming):

_.map: 对数组中的每个元素执行一个函数,并返回一个新数组。

_.filter: 创建一个新数组,包含所有通过指定测试的元素。

_.reduce: 对数组中的每个元素执行一个累加器函数,将其结果汇总为单个值。

2、实用工具(Utilities):

_.clone: 创建对象的浅拷贝或深拷贝。

lodash

_.isEqual: 比较两个值是否相等。

_.isEmpty: 判断值是否是空对象、空数组、空字符串等。

3、函数编程辅助(Function Programming Helpers):

_.curry: 柯里化函数,允许你部分应用参数。

_.partial: 部分应用函数的参数。

_.memoize: 缓存函数的结果,以便后续相同的输入直接返回缓存的结果。

4、函数(Functions):

lodash

_.debounce: 创建一个防抖函数,只有在停止触发事件一段时间后才会执行一次。

_.throttle: 创建一个节流函数,规定在一个单位时间内,只能触发一次函数执行。

_.once: 确保一个函数只执行一次。

5、数据操作(Data Manipulation):

_.find: 从数组中查找满足条件的第一个元素。

_.sortBy: 根据提供的迭代器函数对数组进行排序。

_.groupBy: 根据迭代器函数对元素进行分组。

6、集合(Collections):

_.uniq: 返回没有重复元素的新数组。

_.union: 合并多个数组,并去除重复元素。

_.intersection: 计算多个数组的交集。

7、对象(Objects):

_.keys: 获取对象自身的可枚举属性名。

_.values: 获取对象自身的所有可枚举属性值。

_.pick: 从对象中挑选出指定的属性。

8、程序控制流(Program Flow):

_.times: 创建一个函数,该函数在每次调用时执行 n 次指定的函数。

_.retry: 创建一个函数,该函数在失败时会重试多次。

_.defer: 延迟执行一个函数,直到当前调用栈清空。

9、错误处理(Error Handling):

_.attempt: 尝试执行一个函数并捕获任何错误。

_.pluck: 从对象数组中提取指定属性的值。

_.where: 根据多个属性过滤对象数组。

10、类型检测(Type Checking):

_.isArray: 检查值是否为数组。

_.isBoolean: 检查值是否为布尔值。

_.isDate: 检查值是否为日期对象。

Lodash 的安装和使用

要在项目中使用 Lodash,可以通过以下几种方式进行安装:

使用 npm 安装

npm install lodash

然后在代码中引入:

const _ = require('lodash');

使用 CDN 引入

如果你不想安装依赖,可以直接通过 CDN 引入 Lodash:

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

Lodash 的常见用法示例

以下是一些 Lodash 的常见用法示例:

使用_.map 遍历数组

const numbers = [1, 2, 3, 4];
const doubled = _.map(numbers, function(num) {
  return num * 2;
});
console.log(doubled); // [2, 4, 6, 8]

使用_.filter 过滤数组

const users = [
  { 'user': 'barney', 'age': 36, 'active': true },
  { 'user': 'fred',   'age': 40, 'active': false }
];
const activeUsers = _.filter(users, function(user) {
  return user.active;
});
console.log(activeUsers); // [{ 'user': 'barney', 'age': 36, 'active': true }]

使用_.reduce 求和

const array = [1, 2, 3, 4];
const sum = _.reduce(array, function(sum, num) {
  return sum + num;
}, 0);
console.log(sum); // 10

使用_.clone 深度拷贝对象

const object = { 'a': 1, 'b': { 'c': 2 } };
const other = _.cloneDeep(object);
other.b.c = 3;
console.log(object); // { 'a': 1, 'b': { 'c': 2 } }
console.log(other); // { 'a': 1, 'b': { 'c': 3 } }

使用_.isEqual 比较对象是否相等

const obj1 = { a: 1, b: { c: 2 } };
const obj2 = { a: 1, b: { c: 2 } };
console.log(_.isEqual(obj1, obj2)); // true

使用_.isEmpty 判断对象是否为空

console.log(_.isEmpty({ 'a': 1 })); // false
console.log(_.isEmpty({}));        // true
console.log(_.isEmpty([]));        // true

使用_.curry 柯里化函数

const add = (a, b) => a + b;
const curriedAdd = _.curry(add);
console.log(curriedAdd(1)(2)); // 3
console.log(curriedAdd(1, 2)); // 3

使用_.partial 部分应用函数参数

const greet = function(greeting, name) { return greeting + ' ' + name; };
const sayHelloTo = _.partial(greet, 'hello');
console.log(sayHelloTo('Alice')); // "hello Alice"

使用_.memoize 缓存函数结果

function fibonacci(n) {
  if (n < 2) return n;
  return fibonacci(n 1) + fibonacci(n 2);
}
const memoizedFibonacci = _.memoize(fibonacci);
console.log(memoizedFibonacci(10)); // 55 (计算后缓存结果)
console.log(memoizedFibonacci(10)); // 55 (直接返回缓存结果)

使用_.debounce 防抖函数

function save() { console.log('Saved!'); }
const debouncedSave = _.debounce(save, 1000);
debouncedSave(); // Saved! (1秒后执行)
debouncedSave(); // Saved! (不会立即执行,因为前一次还在等待中)

使用_.throttle 节流函数

function fetch() { console.log('Fetched!'); }
const throttledFetch = _.throttle(fetch, 1000);
throttledFetch(); // Fetched! (1秒内最多执行一次)
throttledFetch(); // (不会立即执行,因为前一次还在等待中)

使用_.once 确保函数只执行一次

let called = false;
const onceFunction = _.once(function() { called = true; console.log('Once function called'); });
onceFunction(); // "Once function called" (第一次调用)
called; // true (状态改变)
onceFunction(); // (不会再次调用)

使用_.find 查找满足条件的第一个元素

const users = [
  { 'user': 'barney', 'age': 36, 'active': true },
  { 'user': 'fred', 'age': 40, 'active': false }
];
const user = _.find(users, function(user) { return user.age < 40; });
console.log(user); // { 'user': 'barney', 'age': 36, 'active': true }

使用_.sortBy 根据属性排序数组

const users = [
  { 'user': 'fred',   'age': 40 },
  { 'user': 'barney', 'age': 36 },
  { 'user': 'freddy', 'age': 42 }
];
const byAge = _.sortBy(users, ['age']);
console.log(byAge); // [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }, { 'user': 'freddy', 'age': 42 } ]

使用_.groupBy 根据属性分组元素

const users = [
  { 'user': 'barney', 'age': 36, 'active': true },
  { 'user': 'fred', 'age': 40, 'active': false },
  { 'user': 'pebbles', 'age': 40, 'active': true }
];
const byAge = _.groupBy(users, 'age');
console.log(byAge); // { '36': [{ 'user': 'barney', 'age': 36, 'active': true }], '40': [{ 'user': 'fred', 'age': 40, 'active': false }, { 'user': 'pebbles', 'age': 40, 'active': true }] }

使用_.pick 从对象中挑选属性

const object = { 'a': 1, 'b': 'two', 'c': 3 };
const picked = _.pick(object, ['a', 'b']);
console.log(picked); // { 'a': 1, 'b': 'two' }

使用_.omit 从对象中删除属性

const object = { 'a': 1, 'b': 'two', 'c': 3 };
const omitted = _.omit(object, ['a', 'c']);
console.log(omitted); // { 'b': 'two' }

使用_.defaults 补充对象默认值

const defaults = { 'a': 1, 'b': 'two' };
const object = { 'a': null, 'c': 3 };
const result = _.defaults(object, defaults);
console.log(result); // { 'a': null, 'b': 'two', 'c': 3 } (null不会被覆盖)

使用_.assign 合并多个对象

const object = { 'a': { 'b': { 'c': 3 } } };
const source = { 'a': { 'b': { 'd': 4 } }, 'e': {'f':5} };
const assigned = _.assign(object, source);
console.log(assigned); // { 'a': { 'b': { 'c': 3, 'd': 4 } }, 'e': { 'f': 5 } } (嵌套对象会被合并)

使用_.extend 合并多个对象(浅拷贝)

const object = { 'a': { 'b': { 'c': 3 } } };
const source = { 'a': { 'b': { 'd': 4 } }, 'e': {'f':5} };
const extended = _.extend({}, object, source); // {}作为第一个参数避免修改原对象
console.log(extended); // { 'a': { 'b': { 'd': 4 } }, 'e': { 'f': 5 } } (浅拷贝,嵌套对象引用不变)

使用_.merge 深度合并多个对象(深拷贝)

const object = { 'a': { 'b': { 'c': 3 } } };
const source = { 'a': { 'b': { 'd': 4 } }, 'e': {'f':5} };
const merged = _.merge({}, object, source); // {}作为第一个参数避免修改原对象
console.log(merged); // { 'a': { 'b': { 'c': 3, d:4 } }, e:{ f:5 } } (深拷贝,嵌套对象完全合并)

使用_.union 合并去重后的数组元素

const a = [1, 2, [3]]; b = [2, [3]]; c = [1, [3]]; // [1, [3]]是重复的,但不同位置不算重复,所以输出是[1, [3], 2];如果需要严格去重,可以使用_.uniqWith(a, b, c, isEqual)来比较内容是否相同,注意这里的比较是基于内容的,而不是基于引用的,[[1], [1]]会被认为不同,因为虽然它们的内容相同,但它们是不同的数组实例,如果需要基于内容的严格去重,可以使用自定义比较函数,const customComparer = (value, other) => JSON.stringify(value) === JSON.stringify(other); const uniqueArray = Array.from(new Set(originalArray.map(item => JSON.stringify(item)))).map(item => JSON.parse(item));这样可以得到基于内容的严格去重数组。

各位小伙伴们,我刚刚为大家分享了有关“lodash”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1364144.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希
上一篇 2024-11-28 17:31
下一篇 2024-11-28 17:35

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入