Js数组中的 find/findIndex/some 以及 every

今天写 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 方法的简化版,只是返回值从匹配的元素换成元素下标,我就不说了。。

所以

  1. 在用于判断是否存在指定条件的元素时,使用 some();
  2. 如果需要全体元素都需要满足指定条件时使用 every();
  3. 需要寻找满足指定条件并返回元素值时使用 find();
  4. 需要寻找满足指定条件的元素下标的时使用 findIndex().

当然,如果你的数组子元素不是对象或者数组时可以使用 includesindexOf 来判断是否存在那个元素和查找这个元素的下标,具体可以看下方附录连接。

附: