使用lodash原地起飞,总结了几个常用的lodash方法

前言

 📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步!

 🍅 个人主页:南木元元


目录

什么是lodash

lodash的按需引入

数组操作

求交集

求合集

求差集

求总和

求平均数

根据条件排序

数组分块

实用的工具函数

clone / 浅拷贝

cloneDeep / 深拷贝

debounce / 防抖

throttle / 节流

pick / 创建选中属性的对象

omit / 剔除对象某些属性

isEqual / 比较对象是否相等

isEmpty / 判断对象是否为空

结语


什么是lodash

Lodash是一个流行的JavaScript实用工具库,提供了许多高效、高兼容性的工具函数,能够方便地处理集合、字符串、数值、函数等多种数据类型,大大提高工作效率。

lodash的按需引入

有些人说lodash里面的好多方法都能自己实现,没必要再引入额外的工具库来增加项目的体积,但是你能保证你实现得比lodash好吗?而且lodash支持多种模块化方案,配合tree-shaking技术或者使用单独的函数模块,几乎不会导致冗余代码。

// 方式1:引入整个lodash对象
import _ from "lodash";
// 方式2:按名称引入特定的函数
import { cloneDeep } from "lodash";

// 上述2种方式都会引入整个lodash库,体积大,而下面2种方式都能实现按需引入,减小体积
// 1.只引入cloneDeep函数
import cloneDeep from "lodash/cloneDeep";
// 2.使用lodash-es
import { cloneDeep } from "lodash-es";

上述第一种方式只会引入引用路径对应的模块,第二种方式使用了es6模块语法的lodash-es(lodash默认是commonjs版本),这让 webpack等打包工具可以对其进行tree-shaking,去除无用的代码,减小打包体积。

接下来总结一些常用的lodash工具方法。

数组操作

求交集

intersection:返回一个包含所有传入数组交集元素的新数组。

_.intersection([2, 1], [4, 2], [1, 2]);  
// => [2]

intersectionBy:根据某个字段来进行计算交集。

_.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');  
// => [{ 'x': 1 }]

 intersectionWith:根据某个条件函数来计算交集,比如使用isEqual。

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];  
var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];  
  
_.intersectionWith(objects, others, _.isEqual);  
// => [{ 'x': 1, 'y': 2 }]

求合集

union:返回一个新的联合数组。

_.union([2], [1, 2]);
// => [2, 1]

unionBy:根据某个字段来计算合集。

_.unionBy([2.1], [1.2, 2.3], Math.floor);
// => [2.1, 1.2]
 
_.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
// => [{ 'x': 1 }, { 'x': 2 }]

unionWith:根据某个条件函数来计算合集。

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
 
_.unionWith(objects, others, _.isEqual);
// => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]

求差集

difference:计算两个数组的差集,返回在第一个数组中出现但不在第二个数组中出现的元素。

_.difference([3, 2, 1], [4, 2]);
// => [3, 1]

differenceBy:根据某个字段计算差集。

_.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor);
// => [3.1, 1.3]
 
_.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
// => [{ 'x': 2 }]

differenceWith:根据某个条件函数计算差集。

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
 
_.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
// => [{ 'x': 2, 'y': 1 }]

求总和

sum:返回总和。

_.sum([4, 2, 8, 6]);
// => 20

sumBy:根据某个字段计算并返回总和。

var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
 
_.sumBy(objects, function(o) { return o.n; });
// => 20
 
_.sumBy(objects, 'n');
// => 20

求平均数

mean:返回平均值。

_.mean([4, 2, 8, 6]);
// => 5

meanBy:根据某个字段计算出平均值。

var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
 
_.meanBy(objects, function(o) { return o.n; });
// => 5
 
_.meanBy(objects, 'n');
// => 5

根据条件排序

sortBy:返回排序后的数组。

var users = [
  { user: "fred", age: 48 },
  { user: "barney", age: 36 },
  { user: "fred", age: 40 },
  { user: "barney", age: 34 },
];
// 按年龄排序
console.log(_.sortBy(users, function(o) { return o.age; }));

结果:

数组分块

chunk:返回一个包含拆分区块的新数组。

constarr = [1,2,3,4,5,6,7,8,9];
console.log(_.chunk(arr,2));

结果:

实用的工具函数

clone / 浅拷贝

浅拷贝是创建一个新对象,如果属性是基本类型,拷贝的就是基本类型的值,如果属性是引用类型,拷贝的就是内存地址 (即浅拷贝只拷贝一层),所以如果其中一个对象改变了这个地址,就会影响到另一个对象。

const obj1 = [{a: 1 }];
const obj2 = _.clone(obj1);
console.log(obj1 === obj2); // false
console.log(obj1.a === obj2.a); // true

cloneDeep / 深拷贝

深拷贝是将一个对象从内存中完整的拷贝一份出来,从堆内存中开辟一个新的区域存放新对象,且修改新对象不会影响原对象。

const obj1 = [{a: 1 }];
const obj2 = _.cloneDeep(obj1);
console.log(obj1 === obj2); // false
console.log(obj1.a === obj2.a); // false

debounce / 防抖

作用:函数被触发多次,只有最后一次会被触发。用于限制函数执行的频率,如输入框的实时搜索,减少接口调用,节约服务器资源。

const fn = () => ({ 
   fetch('https://xxx.cn/api');
})
const res = _.debounce(fn, 3000);

throttle / 节流

作用:函数被触发多次,在指定时间范围内只会调用一次。用于监听页面scroll事件滚动加载,监听页面的resize事件等。

const fn = () => ({ 
   fetch('https://xxx.cn/api');
})
const res = _.throttle(fn, 300);

pick / 创建选中属性的对象

作用:从object中挑出对应的属性,返回一个新对象。

var object = { 'a': 1, 'b': '2', 'c': 3 };
 
_.pick(object, ['a', 'c']);
// => { 'a': 1, 'c': 3 }

结果:

omit / 剔除对象某些属性

作用:忽略掉某些属性后,剩下的属性组成一个新对象。

var object = { 'a': 1, 'b': '2', 'c': 3 };
 
_.omit(object, ['a', 'c']);
// => { 'b': '2' }

结果:

isEqual / 比较对象是否相等

const obj = { a: [{ b: 2 }] };
const obj1 = { a: [{ b: 2 }] };

const res = _.isEqual(obj, obj1);
console.log(res);
// 输出:true

isEmpty / 判断对象是否为空

const obj = {};
const res = _.isEmpty(obj);
console.log(res);
// 输出 true

结语

🔥如果此文对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏✍️评论支持一下博主~     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/319483.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

小程序基础学习(请求封装)(重点,核心)

目录 首先: 封装一个request请求的js文件,用的是Promise 然后: 请求编写 原理:首先在页面加载完成以后发送一次请求数据,由于请求的数据会反复使用,直接把他抽离到外面,以后直接调用。在使用a…

【IDEA】瑞_IDEA模版注释设置_IDEA自动生成注释模版(详细图文步骤)

文章目录 1 概要2 类的自定义模版注释3 自定义模版注释3.1 方法的自定义模版注释3.2 属性的自定义模版注释 🙊 前言:在Java开发中,注释具有不可或缺的重要性,注释负责解释代码,能帮助开发人员深入理解代码的逻辑和功能…

Python 潮流周刊#35:Python JIT 编译器和 Numpy2 即将推出

△△请给“Python猫”加星标 ,以免错过文章推送 你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。本周刊开源,欢迎投稿[1]。另有电报频道[2]作为副刊,补充发布更加丰富的资讯,…

反序列化提升刷题

例题&#xff1a; <?php //flag is in flag.php highlight_file(__FILE__); error_reporting(0); class Modifier { private $var; public function append($value) { include($value); echo $flag; } public function __invoke(){ …

AcWing 843. n-皇后问题

#include <iostream> #include <cstring> #include <algorithm>using namespace std; const int N 10; int n; int col[N], dg[N N], rdg[N N]; // 列占用// 正对角线占用// 副对角线占用 char table[N][N]; // 棋盘void dfs(int index) {if(i…

大型语言模型综述/总结 LLM A Survey of Large Language Models

A Survey of Large Language Model AbstractINTRODUCTIONOVERVIEW背景LLM的新兴能力LLM的关键技术GPT 系列模型的技术演进 大语言模型资源公开可用的模型检查点或 API常用语料库代码库资源 预训练数据收集架构 论文标题&#xff1a;A Survey of Large Language Model 论文地址&…

ssm基于java的智能训练管理平台论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&#xff0c;信息安全性差&#x…

Required request parameter ‘ids‘ for method parameter type List is not present]

在写delete方法的时候&#xff0c;出现了bug 于是将RequestParam换成PathVariable 两者有何区别&#xff1f; pathVariable和RequestParam的区别 在Spring MVC框架中&#xff0c;PathVariable 和 RequestParam 是两种用于从HTTP请求中获取参数的注解&#xff0c;它们的区别…

【前后端的那些事】开源!快速上手富文本+富文本图片上传

文章目录 fullText富文本1. 后端接口1.1 定义常量1.2 定义返回实体类1.3 上传图片接口1.4 下载图片接口 2. 前端代码编写2.1 安装2.2 快速使用 3. 配置富文本图片上传地址3.1 配置图片上传配置 4. 全部代码展示 前言&#xff1a;最近写项目&#xff0c;发现了一些很有意思的功能…

基于卡尔曼滤波的视频跟踪,基于卡尔曼滤波的运动小球跟踪

目录 完整代码和数据下载链接&#xff1a;基于卡尔曼滤波的视频跟踪&#xff0c;基于卡尔曼滤波的运动小球跟踪&#xff08;代码完整&#xff0c;数据齐全&#xff09;资源-CSDN文库 https://download.csdn.net/download/abc991835105/88738577 卡尔曼滤波原理 RBF的定义 RBF理…

rime中州韵小狼毫 敏感词脱敏滤镜

快速录入&#xff0c;是任何一个输入法&#xff0c;以及输入人员&#xff08;无论是否专业&#xff09;的追求目标之一。现实中&#xff0c;由于各种输入法在录入文本时&#xff0c;都无法完全避免重码的问题&#xff0c;所以在输入过程中都或多或少的需要进行选字/选词操作。这…

camtasia studio2024免费版如何下载?怎么录屏?

camtasia studio怎么录屏&#xff1f;Camtasia Studio是一款专门录制屏幕动作的工具&#xff0c;它能在任何颜色模式下轻松地记录屏幕动作&#xff0c;包括影像、音效、鼠标移动轨迹、解说声音等等。一般情况下&#xff0c;用户使用camtasia studio进行录屏时&#xff0c;需要注…

计算机网络夯实之路-HTTP详解

了解 Web 及网络基础 根据 Web浏览器地址栏中指定的 URL&#xff0c;Web浏览器从Web服务器端获取文件资源&#xff08;resource&#xff09;等信息&#xff0c;从而显示出 Web 页面。 通过发送请求获取服务器资源的 Web 浏览器等&#xff0c;都可称为客户端&#xff08;clien…

RibbonGroup 添加QRadioButton

RibbonGroup添加QRadioButton&#xff1a; QRadioButton * pRadio new QRadioButton(tr("Radio")); pRadio->setToolTip(tr("Radio")); groupClipboard->addWidget(pRadio); connect(pRadio, SIGNAL(clicked(…

如何使用C++编程使得在Windows和Linux输入密码的时候保密 linux:tcgetattr tcsetattr

在C编程中&#xff0c;在执行一些操作的时候&#xff0c;终端需要接收用户名和密码&#xff0c;那么在终端输入密码的时候&#xff0c;如何不让别人看见自己的密码&#xff0c;是一个较为关注的问题&#xff1b; 1、问题分析 定义一个登录函数Login //用户登录主循环bool Lo…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存&#xff08;C&#xff09;&#xff09; Baumer工业相机Baumer工业相机的图像高速保存的技术背景Baumer工业相机通过NEOAPI SDK函数图像高速保存在NEOAPI SDK里实现线程高速图像保存&#xff1a;工业相机高…

(分享) 音乐软件Spotify-声破天8.9.4

​【应用名称】&#xff1a;Spotify-声破天 ​【适用平台】&#xff1a;#Android ​【软件标签】&#xff1a;#Spotify ​【应用版本】&#xff1a;8.8.96 → 8.9.4 ​【应用大小】&#xff1a;67MB ​【软件说明】&#xff1a;软件升级更新。iOS可配合qx小火箭类的工具对…

SpringMVC RESTful

文章目录 1、RESTful简介a>资源b>资源的表述c>状态转移 2、RESTful的实现3、HiddenHttpMethodFilter 1、RESTful简介 REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移。 a>资源 资源是一种看待服务器的方式&#xff0c;即&…

一、Mindspore 公开课 - Transformer

课程链接&#xff1a;Mindspore 技术公开课 Transformer 论文地址&#xff0c;建议看完课程以后简单看看论文 前言 Transformer是一种神经网络结构&#xff0c;由Vaswani等人在2017年的论文“Attention Is All You Need” 中提出&#xff0c;用于处理机器翻译、语言建模和文…
最新文章