软件教程 2025年08月6日
0 收藏 0 点赞 788 浏览 2327 个字
摘要 :

文章目录 一、先搞清楚核心差异在哪 适用范围 二、实际场景里它们表现咋样? 1. 检查数组元素 2. 从指定索引位置开始检查 3. 检查对象(Lodash特有技能) 4. 检查字……




  • 一、先搞清楚核心差异在哪
    • 适用范围
  • 二、实际场景里它们表现咋样?
    • 1. 检查数组元素
    • 2. 从指定索引位置开始检查
    • 3. 检查对象(Lodash特有技能)
    • 4. 检查字符串(Lodash更简单粗暴)
  • 三、性能咋样?啥场景该用谁?
  • 四、最后总结一下

咱写代码的时候,经常会碰到要判断一个数组里有没有某个特定元素的情况,JavaScript里有两个方法都能干这事儿,一个是Lodash库的_.includes,另一个是原生Array.prototype.includes。这俩看着功能差不多,都是检查是否包含某个值,但实际上在好多方面都有挺大区别,今天就来好好唠唠,以后别再傻傻分不清了。

一、先搞清楚核心差异在哪

这俩方法的核心区别主要体现在适用范围、参数顺序、对对象和字符串的处理方式,还有兼容性上。咱通过下面这个表格,能更直观地对比一下。

适用范围

特性 Lodash _.includes 原生Array.includes
适用范围 支持数组、对象、字符串 仅限数组
参数顺序 _.includes(collection, value, fromIndex=0) array.includes(value, fromIndex=0)
对象处理 可以检查对象中是否包含某个键值对(不过得自己写点逻辑) 不支持对象
字符串处理 能直接检查子字符串(比如_.includes(\'abc\',\'b\') 只能用于数组,要是处理字符串,得先把字符串转成数组
兼容性 兼容所有浏览器(连老古董IE都没问题) 在ES6+环境才能用(IE11+部分支持)

这么一看,差距是不是就很明显啦?Lodash的_.includes适用范围更广,原生的Array.includes就比较专一,只对数组“情有独钟”。

二、实际场景里它们表现咋样?

咱光看理论还不够,得来点实际代码示例,这样理解起来更轻松。

1. 检查数组元素

// Lodash检查数组是否包含指定元素
_.includes([1, 2, 3], 2); // true

// 原生方法检查数组是否包含指定元素
[1, 2, 3].includes(2); // true

从这段代码能看出来,在检查数组元素的时候,这俩方法返回的结果是一样的。不过要是你的项目得兼容老版本浏览器,那Lodash的_.includes就更靠谱点。

2. 从指定索引位置开始检查

// Lodash从指定索引(第三个参数)开始检查数组是否包含指定元素
_.includes([1, 2, 3, 2], 2, 2); // true(从索引2开始检查)

// 原生方法从指定索引开始检查数组是否包含指定元素
[1, 2, 3, 2].includes(2, 2); // true

虽然它们的参数设计不太一样,但最终实现的功能是一样的,都是从指定索引位置开始找目标元素。

3. 检查对象(Lodash特有技能)

原生的Array.includes是没办法直接检查对象的,Lodash的_.includes在这方面就很给力。

const obj = { a: 1, b: 2 };

// 检查对象里是否包含某个值
_.includes(obj, 1); // true(检查值是否存在)
_.includes({ \'a\': 1 }, 1); // true

// 检查对象里是否包含某个键值对(这里得结合其他方法)
_.includes(_.toPairs(obj), [\'a\', 1]); // true(先把对象转成键值对数组)

比如说,咱想知道对象里有没有某个特定的值,或者某个键值对,用Lodash的_.includes就能轻松搞定。

4. 检查字符串(Lodash更简单粗暴)

// Lodash直接检查字符串中是否包含指定子字符串
_.includes(\'hello\', \'e\'); // true

// 原生方法检查字符串中是否包含指定子字符串,得先操作字符串或转成数组
\'hello\'.indexOf(\'e\')!== -1; // true
Array.from(\'hello\').includes(\'e\'); // true(这种方式又复杂又不高效)

从代码里能看出来,用原生方法检查字符串里有没有某个子字符串,要么用indexOf方法判断,要么先把字符串转成数组再用includes,相比之下,Lodash的_.includes就简洁多了。

三、性能咋样?啥场景该用谁?

选方法的时候,性能也是个重要因素。一般来说,原生的Array.includes在处理纯数组的时候性能更好,毕竟它是JavaScript自带的,不用额外引入别的库。要是你的项目环境支持ES6+,而且只需要处理数组,那就用原生的Array.includes,又快又方便。

但要是你的项目得兼容老浏览器,或者需要处理对象、字符串,再或者想用Lodash的链式操作,让代码写起来更流畅,那Lodash的_.includes就是更好的选择。

下面再总结一下不同场景下推荐使用的方法:

场景 推荐方法 原因
仅需检查数组元素 Array.includes 原生方法性能更优,还不用引入库
兼容旧浏览器 _.includes 能解决原生方法兼容性不足的问题
处理对象或字符串 _.includes 原生方法不支持直接处理
需要链式调用(Lodash链) _.includes 和Lodash其他方法搭配起来更顺畅

四、最后总结一下

简单来说,要是项目环境比较新,只涉及数组处理,那就优先用原生的Array.includes,又高效又简洁。要是有兼容旧浏览器的需求,或者要处理对象、字符串,还想玩Lodash链式操作,那就选Lodash的_.includes,它能满足更多复杂场景的需求。

希望看完这篇文章,大家以后在选_.includes还是Array.includes的时候,心里都能有本明白账,写代码也能更顺溜!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/6813.html

管理员

相关推荐
2025-08-06

文章目录 一、Promise基础回顾 二、Promise 与 axios 结合使用场景及方法 (一)直接返回 axios …

269
2025-08-06

文章目录 一、模块初始化时的内部机制 二、常见导出写法的差异分析 (一)写法一:module.exports…

107
2025-08-06

文章目录 一、ResizeObserver详解 (一)ResizeObserver是什么 (二)ResizeObserver的基本用法 …

683
2025-08-06

文章目录 一、前期准备工作 (一)下载相关文件 (二)安装必要工具 二、处理扣子空间生成的文件…

338
2025-08-06

文章目录 一、官方文档 二、自动解包的数据类型 ref对象:无需.value即可访问 reactive对象:保持…

371
2025-08-06

文章目录 一、Hooks的工作原理 二、在if语句中使用Hook会出什么岔子? 三、React官方的Hook使用规…

843
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号