Lodash 的 includes 还是 Array.prototype.includes

Lodash 的 _.includes 和 JavaScript 原生的 Array.prototype.includes 虽然功能相似(判断是否包含某个值),但在使用场景、参数设计和底层实现上有显著区别。以下是两者的对比:


一、核心区别

特性 Lodash _.includes 原生 Array.includes
适用范围 支持数组、对象、字符串 仅限数组
参数顺序 _.includes(collection, value, fromIndex=0) array.includes(value, fromIndex=0)
对象处理 可以检查对象中是否包含某个键值对(需自定义逻辑) 不支持对象
字符串处理 支持直接检查子字符串(如 _.includes('abc','b') 只能用于数组,字符串需先转为数组
兼容性 兼容所有浏览器(包括旧版 IE) ES6+ 环境支持(IE11+ 部分支持)

二、具体场景示例

1. ​数组检查

markdown 复制代码
javascript复制// Lodash
_.includes([1, 2, 3], 2); // true

// 原生
[1, 2, 3].includes(2); // true

结论:两者行为一致,但 Lodash 更适用于需要兼容旧浏览器的场景。


2. ​从指定索引开始检查

markdown 复制代码
javascript复制// Lodash(第三个参数为起始索引)
_.includes([1, 2, 3, 2], 2, 2); // true(从索引2开始检查)

// 原生
[1, 2, 3, 2].includes(2, 2); // true

结论:参数设计不同,但功能一致。


3. ​对象检查(Lodash 独有)​

markdown 复制代码
javascript复制const obj = { a: 1, b: 2 };

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

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

原生方法无法直接处理对象


4. ​字符串检查(Lodash 更简洁)​

markdown 复制代码
javascript复制// Lodash
_.includes('hello', 'e'); // true

// 原生(需操作字符串或转为数组)
'hello'.indexOf('e') !== -1; // true
Array.from('hello').includes('e'); // true(复杂且低效)

三、性能与推荐场景

场景 推荐方法 原因
仅需检查数组元素 Array.includes 原生方法性能更优(无需引入库)
兼容旧浏览器 _.includes 弥补原生兼容性不足
处理对象或字符串 _.includes 原生无法直接支持
需要链式调用(Lodash链) _.includes 与 Lodash 其他方法组合更流畅

四、总结

  • 优先使用原生 Array.includes
    若项目环境支持 ES6+,且仅需处理数组,原生方法更高效简洁。
  • 选择 Lodash _.includes
    需要兼容旧浏览器、处理对象/字符串,或结合 Lodash 链式操作时更灵活。
相关推荐
_Matthew1 小时前
JavaScript |(四)正则表达式 | 尚硅谷JavaScript基础&实战
开发语言·javascript·正则表达式
拉不动的猪2 小时前
刷刷题40(vue中计算属性不能异步,如何实现异步)
前端·javascript·vue.js
冴羽yayujs3 小时前
SvelteKit 最新中文文档教程(6)—— 状态管理
前端·javascript·vue.js·前端框架·react·svelte·sveltekit
烛阴3 小时前
前端进阶必学:JavaScript Class 的正确打开方式,让你代码更清晰!
前端·javascript
ai产品老杨3 小时前
全流程数字化管理的智慧物流开源了。
前端·javascript·vue.js·人工智能·安全
会敲代码的Steve4 小时前
慕慕手记项目日记 首页数据的渲染,使用js 2025-3-16
开发语言·javascript·ecmascript
爱嘿嘿的小黑4 小时前
「绝对干货」AI TimeLine Generator网站开发全流程分享
前端·javascript·aigc
熊大如如4 小时前
JavaScript 继承方式总结
开发语言·javascript·原型模式
冴羽4 小时前
SvelteKit 最新中文文档教程(8)—— 部署 Node 服务端
前端·javascript·svelte
IT、木易6 小时前
JavaScript如何判断一个变量是否为数组的多种方法及原理,除Array.isArray()外还有哪些方式?
开发语言·前端·javascript