今天写 Demo 的时候突然在想 find()
与 some()
的区别是什么? 都是为了找到数组中的内容啊?他们的区别在哪里呢
其实我在打这行字的时候就突然想起来区别是什么了😂,所以我把标题改了
相对于 some()
方法, 我知道 find()
方法会更加早一些,不知道为何,🤔明明 find()
方法才是更加新的特性( 也许因为子龙提到的因为jQuery?)
所以今天我们来聊一聊 find
/findIndex
/some
以及 every
这4个使用起来感觉差不多的方法。
先来说 find()
方法:
- find 方法会寻找数组中满足条件的第一个元素的值(返回的是整个元素的内容,并不是元素的引用),如果没有则返回
undefined
。
接着是 some()
方法:
- some 方法会判断数组中是否存在满足条件的元素,如果有则返回
true
, 如果没有则返回false
。
这两个方法都会在遇到第一个满足条件的元素时返回并退出方法。
我个人之前一直使用 find
方法来寻找数组中是否有满足条件的元素,很多时候只是判断是否存在,并没有使用返回的元素值。也许 find
更加语义话点吧,后来知道了 findIndex
之后开始使用 findIndex
。
直到有天群里在谈论 filter
时,有人提了一嘴 some()
我才知道这个 ECMA 5.1 的方法
匹配全体 every()
方法
- every 方法判断一个数组内的所有元素是否都满足指定条件,返回一个布尔值。
这个方法和 some 方法类似,用到的场景并不多,
它会匹配全体,全体都通过时才会返回 true
,如果过程中遇到一个元素没有通过条件,则将会立即退出并返回 false
最后是 findIndex()
方法
- findIndex 方法返回数组中满足条件的第一个元素的下标,如果没有满足条件的元素则返回
-1
。
这个简直就是 find 方法的简化版,只是返回值从匹配的元素换成元素下标,我就不说了。。
所以
- 在用于判断是否存在指定条件的元素时,使用
some()
; - 如果需要全体元素都需要满足指定条件时使用
every()
; - 需要寻找满足指定条件并返回元素值时使用
find()
; - 需要寻找满足指定条件的元素下标的时使用
findIndex()
.
当然,如果你的数组子元素不是对象或者数组时可以使用 includes
和 indexOf
来判断是否存在那个元素和查找这个元素的下标,具体可以看下方附录连接。