@value 数组_如何检查数组是否包含JavaScript中的值?

v2-a8eb4cb24ddf6f1b6fba569da05adad2_1440w.jpg?source=172ae18b

JavaScript提供了许多有用的数组方法来检查数组是否包含特定值。

虽然搜索数字或字符串之类的原始值相对容易,但是搜索对象则稍微复杂一些。

在本文中,您将了解如何确定数组是否包含特定值(原始或对象)。

1.数组包含原始值

JavaScript中的原始值是字符串,数字,布尔值,符号和特殊值undefined

确定数组是否包含原始值的最简单方法是使用array.includes()ES2015数组方法:

v2-78537fd793c9ce449cb338241d8d616b_b.jpeg

第一个参数value是要在数组中搜索的值。第二个可选参数fromIndex是从何处开始搜索的索引。该方法返回一个布尔值,指示是否array包含value

例如,让我们确定问候语数组是否包含'hi''hey'

v2-3f85e35c079efa3757ca15f5d7c260bd_b.jpg

greetings.includes('hi')返回,true因为数组包含'hi'item。

但是greetings.includes('hey')return false,表示数组中'hey'缺少该值greetings

1.1从索引中搜索

array.includes(value, fromIndex) 还接受可选的第二个参数以开始搜索开始索引的值。

例如,让我们从1数组中的第二个项目(索引和向上)开始搜索:

v2-a660682d891e09abd0631a1760f602a7_b.jpg

letters.includes('c', 1)开始'c'从索引中搜索字母1。正如预期的那样,找到了这封信。

但是,letters.includes('a', 1)返回false是因为从index 1到end 的数组不包含item 'a'

2.数组包含一个对象

检查数组是否包含对象比搜索原始值稍微复杂一些。

确定数组是否包含对对象的引用很容易-只需使用该array.includes()方法即可。例如:

v2-1be9f5be9ec97291189ebfdb1c561abf_b.jpg

greetings.includes(toSearch)返回true因为greetings数组包含toSearch对象引用(指向数组的第一项)。

但是更常见的是,您不想按引用进行搜索,而是希望按其内容搜索对象。在这种情况下array.includes()将不起作用:

v2-5e90bbfaad37f6a417b22f5cc97cb609_b.jpg

greetings.includes(toSearch)返回false,因为数组不包含toSearch对象引用。尽管数组包含的对象hi看起来完全一样toSearch

好的,那么您如何确定数组是否按内容而不是引用包含对象?使用array.some()方法结合对象的浅层或深层相等性检查。

在对象的浅层相等检查期间,将检查两个对象的属性列表是否相等。

这是浅层相等检查的可能实现:

v2-089c0cd024a4e76d99d0d3be7c4926b6_b.jpg

shallowEqual(object1, object2)返回true的情况下,如果两个进行比较的对象object1,并object2具有相同的组具有相同值属性。

在以下代码段中,hihiCopy内容相等,而hihello则不相等:

v2-68c583a0b1acbe8f87a81f7f6935caf2_b.jpg

提醒一下,如果至少有一个time 函数返回,则array方法array.some(callback)将返回。 truecallbacktrue

现在,让我们结合使用浅等式函数和array.some(callback)method来按内容查找数组是否包含对象:

v2-a246defebdb1b990f8369edf098298b1_b.jpg

greetings.some(item => shallowEqual(item, toSearch))检查数组的每个项目与toSearch对象的浅浅相等性。

如果搜索到的对象还包含嵌套对象,则shallowEqual()可以使用deepEqual()函数代替函数。

3.总结

在数组内部搜索诸如字符串或数字之类的原始值很简单:只需使用array.includes(value)方法即可。

通过内容确定数组是否包含对象需要更多的活动部分。您必须array.some(callback)结合浅层相等性检查使用方法:

v2-650069cf5e435a991170ae179ec7654a_b.jpeg

注意,提出的方法不是唯一的方法。例如,很长时间array.indexOf(value) !== -1以来一直使用表达式(slighlty clumsy)来确定是否array包含value

您还知道什么其他方法可以检测数组是否包含值?

原著作者:德米特里·帕夫鲁汀

文章来源:国外

文章链接:

Dmitri Pavlutin Blog​dmitripavlutin.com
v2-b9982406b5748fc7a5f0a51ce00e670f_ipico.jpg

PS:原著文章内容为英文版本,建议使用360极速浏览器进行翻译阅读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值