当前位置: 首页 > news >正文

lodash常用函数

文章目录

  • 一、数组
    • 1、chunk分组
    • 2、difference、differenceBy、differenceWith
    • 3、findIndex
    • 4、intersection、intersectionBy、intersectionWith
    • 5、union、unionBy、unionWith
  • 二、对象
    • 1、pick、omit
  • 2、get、set
  • 三、数学
    • 1、sum、sumBy
    • 2、range
  • 四、工具函数
    • 1、isEqual、isEmpty
    • 2、clone、cloneDeep
    • 3、debounce 防抖
    • 4、throttle 节流
    • 5、lodash对象

Lodash 是一个一致性、模块化、高性能的 JavaScript 实用工具库。

一、数组

1、chunk分组

_.chunk(array, [size=1]);size表示间隔

_.chunk(['a', 'b', 'c', 'd', 'e'], 2);
// => [['a', 'b'], ['c', 'd'], ['e']]

2、difference、differenceBy、differenceWith

  • isEqual函数表示深度比较
  • difference 代表基础数据类型的对比
  • differenceBy 表示对值进行转化后对比
  • differenceWith 表示两个数据整体的对比
  • 差异集合
// 找不同
_.difference([3, 2, 1], [4, 2]);
// => [3, 1]// array: 目标 values:排除值;iteratee调用每个元素后返回值,再对比该返回值
// _.differenceBy(array, [values], [iteratee=_.identity])
_.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor);
// 等同于
_.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], (value) => Math.floor(value));
// => [3.1, 1.3] // 2.2 2.5 调用后都是2,所以被识别成同一个值var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];_.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
// => [{ 'x': 2, 'y': 1 }]
_.differenceWith(objects, [{ 'x': 1, 'y': 2 }], (arrVal, othVal) => arrVal.x > othVal.x);
// => [{ 'x': 1, 'y': 2 }]

3、findIndex

  • findIndex(array, [iteratee=_.identity], [fromIndex=0]), [] 中括号表示可选参数,可传可不传,但是不能跨可选,也就是说连续两个可选参数,想要使用第二个参数,也必须使用第一个参数
  • [predicate=_.identity] (Array|Function|Object|string) 该参数可以有多种参数类型,Function基本就是js中的findIndex实现,也可以使用其他快捷方式
  • 由于一些用户的浏览器版本比较低,当使用最新的ECMAScript新语法可能出现异常,直接导致线上问题(自己本地开发不一定有问题),所以一些函数可以借用lodash库辅助实现即可(当然也可以自己定义实现)
var users = [{ 'user': 'barney',  'active': false },{ 'user': 'fred',    'active': false },{ 'user': 'pebbles', 'active': true }
];_.findIndex(users, function(o) { return o.user == 'barney'; }); // Function
// => 0
_.findIndex(users, { 'user': 'fred', }) // Object
// => 1

4、intersection、intersectionBy、intersectionWith

  • 类似于difference,只不过函数结果是取交集
_.intersection([2, 1], [4, 2], [1, 2]); // 基础数据类型
// => [2]
_.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor); // 值进行转化
// => [2.1]
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 }]

5、union、unionBy、unionWith

  • 合集,注意有去重效果;
_.union([2], [1, 2]);
// => [2, 1]
// 另外两种就不一一举例了,跟交集、差集类似

二、对象

1、pick、omit

  • pick挑选部分属性
  • omit排除部分属性
// _.pick(object, [props])
var object = { 'a': 1, 'b': '2', 'c': 3 };_.pick(object, ['a', 'c']);
// => { 'a': 1, 'c': 3 }
_.omit(object, ['a', 'c']);
// => { 'b': '2' }

2、get、set

  • _.get(object, path, [defaultValue]); 注意path表示动态的路径
  • _.set(object, path, value); 设置值
var object = { 'a': [{ 'b': { 'c': 3 } }] };_.get(object, 'a[0].b.c');
// => 3_.set(object, 'a[0].b.c', 5);
console.log(object.a[0].b.c);
// => 5

三、数学

1、sum、sumBy

快速计算总数

_.sum([4, 2, 8, 6]);
// => 20var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];_.sumBy(objects, function(o) { return o.n; }); // 函数更加灵活
// => 20

2、range

_.range([start=0], end, [step=1]);

// 包含起始点,不包含终止点(跟Array.slice有些类似)可以快速创建范围数的集合
_.range(1, 5, 1);
// => [1, 2, 3, 4]

四、工具函数

1、isEqual、isEmpty

  • isEqual数据深度比较,是否全等返回boolean
  • isEmpty返回是否是空对象
var object = { 'a': 1 };
var other = { 'a': 1 };_.isEqual(object, other);
// => true_.isEmpty({})
// => true

2、clone、cloneDeep

  • clone表示浅拷贝,一般被解构赋值代替
  • cloneDeep表示深拷贝,注意如果数据量大,有性能问题;一般使用JSON性能比较高JSON.parse(JSON.stringify([{}])),当然JSON存在function、undefined无法转化的问题
var objects = [{ 'a': 1 }, { 'b': 2 }];var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false

3、debounce 防抖

  • _.debounce(func, [wait=0], [options=]);options.leading 表示是否延迟开始前调用,默认false;
    options.maxWait 表示fun被推迟的最大值;options.maxWait 表示是否延迟开始后调用,默认true
function click(params) {console.log('click')
}
document.body.addEventListener('click', _.debounce(click, 300))

4、throttle 节流

  • _.throttle(func, [wait=0], [options=]);options.leading 表示是否延迟开始前调用,默认true;options.maxWait 表示是否延迟开始后调用,默认false
document.body.addEventListener('click', _.throttle(() => console.log('click'), 1000))

5、lodash对象

  • lodash对象可以链式调用
_([1, 2, 3]).map(item => item * item).reduce(_.add)

相关文章:

lodash常用函数

文章目录 一、数组1、chunk分组2、difference、differenceBy、differenceWith3、findIndex4、intersection、intersectionBy、intersectionWith5、union、unionBy、unionWith 二、对象1、pick、omit 2、get、set三、数学1、sum、sumBy2、range 四、工具函数1、isEqual、isEmpty…...

触控算法总结

一、触控湿手指算法的具体实现原理涉及多个方面的技术和方法,主要包括以下几个关键点 1.电容变化检测 电容式触摸屏通过检测电容变化来确定触摸位置。当手指接触屏幕时,会引起电容的变化。然而,当手指湿润时,水分会影响电容值,导致触摸屏误判成无法正确识别触控点 2.噪声过滤: …...

齐次矩阵包含平移和旋转

第一个矩阵旋转矩阵 A [ R 1 0 0 1 ] A\left[\begin{matrix}R_{1} & 0\\0 & 1\end{matrix}\right] A[R1​0​01​] 第一个平移矩阵 B [ 1 T 1 0 1 ] B\left[\begin{matrix}1 & T_{1}\\0 & 1\end{matrix}\right] B[10​T1​1​] C [ R 2 0 0 1 ] C\left[\be…...

Move AI技术浅析(四):运动跟踪与估计

一、运动跟踪与估计模块概述 运动跟踪与估计 是 Move AI 的核心模块之一,其主要任务是从提取到的关键点特征中,分析和理解运动的动态特性,包括运动轨迹、速度、加速度、方向等。该模块通常包括 时间序列分析 和 运动估计 两个子模块。 时间…...

NCR+可变电荷块3——NCB/cell绘图1

文献method参考: 蛋白质序列数据从uniprot中获取 https://www.uniprot.org/uniprotkb/P46013/entry https://www.uniprot.org/uniprotkb/P06748/entry、 1,电荷分布计算: Charge distribution was calculated as the sum of the charges …...

数据仓库是什么?数据仓库简介

数据仓库(Data Warehouse)是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持企业的管理决策。以下是对数据仓库的详细解释: 一、定义与特性 定义:数据仓库是构建在组织的现有数据基础上&#x…...

AI的进阶之路:从机器学习到深度学习的演变(二)

AI的进阶之路:从机器学习到深度学习的演变(一) 三、机器学习(ML):AI的核心驱动力 3.1 机器学习的核心原理 机器学习(Machine Learning, ML)突破了传统编程的局限,它不再…...

C++中属性(Attributes)

属性(Attributes)在 C 中的完整讲解 在 C 中,属性(Attributes) 是一种编译时机制,用于附加元数据到函数、变量、类型等元素上,以指导编译器如何优化、检查、警告或者改变编译行为。通过属性&am…...

Go语言中的defer,panic,recover 与错误处理

目录 前言 三个关键字 defer语句 panic语句 recover函数 defer、panic、recover组成的错误处理 总结 前言 在其他编程语言中,如Java,宕机往往以异常的形式存在。底层抛出异常,上层逻辑通过try...catch...fanally机制捕获异常并处理&am…...

(C语言)力扣 904.水果成篮

写在所有的前面: 本文采用C语言实现代码 目录 写在所有的前面:题目说明题目:力扣 904.水果成篮题目出处题目描述Description输入Input输出Output样例Sample限制Hint 解答说明方案解题思路一般情况特殊情况 代码实现其他解释 题目说明 题目…...

2024 年12月英语六级CET6听力原文(Lecture部分)

2024 年12月英语六级CET6听力原文(Long Conersation和Passage) 1 牛津大学关于普遍道德准则的研究及相关观点与建议 译文 2 食物颜色对味觉体验及大脑预期的影响 译文 3 财务资源对意义与幸福之间关系的影响研究 译文...

CentOS下,离线安装vscode的步骤;

前置条件: 1.CentOS7; 步骤: 1.下载vscode指定版本,例如; 例如 code-1.83.1-1696982959.el7.x86_64.rpm 2.使用下面命令: sudo rpm -ivh code-1.83.1-1696982959.el7.x86_64.rpm 其他: 卸载vscode的命…...

ubuntu停止.netcore正在运行程序的方法

在Ubuntu系统中停止正在运行的.NET Core程序,你可以使用以下几种方法: 使用kill命令: 如果你知道.NET Core程序的进程ID(PID),你可以直接使用kill命令来停止它。首先,使用ps命令配合grep来查找.…...

机器学习基础 衡量模型性能指标

目录 1 前言 ​编辑1.1 错误率(Error rate)&精度(Accuracy)&误差(Error): 1.2 过拟合(overfitting): 训练误差小,测试误差大 1.3 欠拟合(underfitting):训练误差大,测试误差大 1.4 MSE: 1.5 RMSE: 1.6 MAE: 1.7 R-S…...

《OpenCV计算机视觉》-对图片的各种操作(均值、方框、高斯、中值滤波处理)及形态学处理

文章目录 《OpenCV计算机视觉》-对图片的各种操作(均值、方框、高斯、中值滤波处理)边界填充阈值处理图像平滑处理生成椒盐图片均值滤波处理方框滤波处理高斯滤波处理中值滤波处理 图像形态学腐蚀膨胀开运算闭运算顶帽和黑帽 《OpenCV计算机视觉》-对图片…...

如何让Tplink路由器自身的IP网段 与交换机和电脑的IP网段 保持一致?

问题分析: 正常情况下,我的需求是:电脑又能上网,又需要与路由器处于同一局域网下(串流Pico4 VR眼镜),所以,我是这么连接 交换机、路由器、电脑 的: 此时,登录…...

【JetPack】Navigation知识点总结

Navigation的主要元素&#xff1a; 1、Navigation Graph&#xff1a; 一种新的XML资源文件,包含应用程序所有的页面&#xff0c;以及页面间的关系。 <?xml version"1.0" encoding"utf-8"?> <navigation xmlns:android"http://schemas.a…...

InnoDB引擎的内存结构

InnoDB擅长处理事务&#xff0c;具有自动崩溃恢复的特性 架构图&#xff1a; 由4部分组成&#xff1a; 1.Buffer Pool&#xff1a;缓冲池&#xff0c;缓存表数据和索引数据&#xff0c;减少磁盘I/O操作&#xff0c;提升效率 2.change Buffer&#xff1a;写缓冲区&#xff0c…...

Y3地图制作1:水果缤纷乐、密室逃脱

文章目录 一、水果缤纷乐1.1 游戏设计1.1.1 项目解析1.1.2 项目优化1.1.3 功能拆分 1.2 场景制作1.2.1 场景需求1.2.2 创建主镜头、绘制草稿&#xff0c;构思文案和情景1.2.3 构建场景地图1.2.4 光源与氛围设置 1.3 游戏初始化1.3.1 物编、UI预设置1.3.2 游戏初始化1.3.2 玩家初…...

ESP32_H2(IDF)学习系列-ADC模数转换(连续转换)

一、简介&#xff08;节选手册&#xff09; 1 概述 ESP32-H2 搭载了以下模拟外设&#xff1a; • 一个 12 位逐次逼近型模拟数字转换器 (SAR ADC)&#xff0c;用于测量最多来自 5 个管脚上的模拟信号。 • 一个温度传感器&#xff0c;用于测量及监测芯片内部温度。 2 SAR ADC 2…...

【Android】Android Studio项目代码异常错乱问题处理(2020.3版本)

问题 项目打开之后&#xff0c;发现项目文件直接乱码&#xff0c; 这样子的 这本来是个Java文件&#xff0c;结果一打开变成了这种情况&#xff0c;跟见鬼一样&#xff0c;而且还不是这一个文件这样&#xff0c;基本上一个项目里面一大半都是这样的问题。 处理方法 此时遇到…...

从零开始,搭建一个基于 Django 的 Web 项目

&#x1f3af; 主要步骤概述 1️⃣ 安装 Python 和 pip 2️⃣ 创建虚拟环境 3️⃣ 安装 Django 4️⃣ 创建 Django 项目 5️⃣ 运行开发服务器 6️⃣ 创建一个简单的应用&#xff08;app&#xff09; 7️⃣ 配置数据库并迁移 8️⃣ 创建超级用户&#xff08;admin&#xff09;…...

机器人夹爪的选型与ROS通讯——机器人抓取系统基础系列(六)

文章目录 前言一、夹爪的选型1.1 任务需求分析1.2 软体夹爪的选型 二、夹爪的ROS通讯2.1 夹爪的通信方式介绍2.2 串口助手测试2.3 ROS通讯节点实现 总结Reference: 前言 本文将介绍夹爪的选型方法和通讯方式。以鞋子这类操作对象为例&#xff0c;将详细阐述了对应的夹爪选型过…...

集成电路设计:从概念到实现的完整解析优雅草卓伊凡

集成电路设计&#xff1a;从概念到实现的完整解析优雅草卓伊凡 一、集成电路设计&#xff1a;芯片制造的”灵魂蓝图” 1.1 什么是集成电路设计&#xff1f; 集成电路&#xff08;IC&#xff09;设计是指通过电子设计自动化&#xff08;EDA&#xff09;工具&#xff0c;将数百…...

软件测评服务如何依据标准确保品质?涵盖哪些常见内容?

软件测评服务涉及对软件的功能和性能等多维度进行评估和检验&#xff0c;这一过程有助于确保软件的品质&#xff0c;降低故障发生率及维护费用&#xff0c;对于软件开发和维护环节具有至关重要的价值。 测评标准依据 GB/T 25000.51 - 2016是软件测评的核心依据。依照这一标准…...

华为×小鹏战略合作:破局智能驾驶深水区的商业逻辑深度解析

当中国智能电动车竞争进入下半场&#xff0c;头部玩家的合纵连横正在重构产业格局。华为与小鹏汽车近日官宣的“战略合作”&#xff0c;表面看是技术互补的常规操作&#xff0c;实则暗藏改写行业游戏规则的深层商业逻辑。 一、技术破壁&#xff1a;从“单点突破”到“全栈协同”…...

如何让AI自己检查全文?使用OCR和LLM实现自动“全文校订”(可DIY校订规则)

详细流程及描述参见仓库&#xff08;如果有用的话&#xff0c;请给个收藏&#xff09;&#xff1a; GitHub - xurongtang/DocRevision_Proj: A simple project about how to revist docment (such as your academic paper) in a automatic way with the help of OCR and LLM.A…...

2024年第十五届蓝桥杯青少Scratch初级组-国赛—画矩形

2024年第十五届蓝桥杯青少Scratch初级组-国赛—画矩形 题目点下方&#xff0c;支持在线编程&#xff0c;在线获取源码和素材&#xff5e; 画矩形_scratch_少儿编程题库学习中心-嗨信奥 程序演示可点下方&#xff0c;支持源码获取&#xff5e; 画矩形-scratch作品-少儿编程题库…...

mysql实现分页查询

文章目录 mysql实现分页查询1. 使用LIMIT和OFFSET2. 使用计算OFFSET的函数&#xff08;适用于动态分页&#xff09;3. 使用MySQL的变量&#xff08;适用于存储过程&#xff09; 获取所有用户数据并分页 mysql实现分页查询 在MySQL中实现分页查询&#xff0c;通常我们会使用LIM…...

如何在Lyra中创建一个新的Game Feature Plugin和Experience游戏体验

目录 -1.前言0.预备知识1.创建一个新的Game Feature Plugin插件2.创建Lyra Pawn Data Asset3. 创建Lyra Experience Definition4. 创建自定义关卡5. 设置资产管理器Asset Manager引用6. 创建Lyra User Facing Experience Definition7. 在编辑器中运行测试后记-1.前言 由于转职…...