Lodash的includes和原生Array.includes到底选哪个

前端 潘老师 1个月前 (03-21) 30 ℃ (0) 扫码查看

咱写代码的时候,经常会碰到要判断一个数组里有没有某个特定元素的情况,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.panziye.com/front/16077.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】