两个数组保留相同属性_检查数组是否包含JavaScript中的值

2a23178d4c4d14e850192dcd6ef90045.png

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

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

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

1.数组包含原始值

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

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

092592919a440781471ea9d476e8ec48.png

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

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

d87928c6ae91d30d83b6c5b113ea5137.png

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

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

1.1从索引中搜索

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

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

a0c7215a07270c26f35c32d203c8b532.png

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

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

2.数组包含一个对象

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

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

66680c449963fdd9990c3f7ee8f5a117.png

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

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

06d4c86bba370038293a6d6eb2979d22.png

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

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

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

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

cc15fea7bbf99f5ea00c46d2bddf6908.png

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

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

7535c5545f4f4d0199e57e976867b0d6.png

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

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

47db16096d95056b95baa5a12c7035d8.png

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

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

3.总结

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

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

e66180f3391c446d4e4e04068d337d7e.png

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

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

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

文章来源:国外

原著链接:

Dmitri Pavlutin Blog​dmitripavlutin.com
7657e878a6d21926d5ea609b1645984d.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值