Методы массива для поиска определенного элемента и его полифиллов
Array.prototype.findIndex (predFn):
- он принимает функцию прогнозирования в качестве аргумента и возвращает индекс первого найденного элемента и -1, если элемент не найден.
let a = [1,2,3,"4",4] a.findIndex((d) => d == 4) // returns 3 a.find((d) => d === "2") // returns -1
Array.prototype.find (predFn)
- он ведет себя точно так же, как указано выше, только возвращает значение элемента, если он найден, и undefined, если не может найти элемент.
let a = [1,2,3,"4",4] a.find((d) => d == 4) // returns "4" a.find((d) => d === "3") // returns undefined
полифилл для поиска
Если вы внимательно посмотрите на две приведенные выше функции, они очень похожи на Array.filter
, за исключением
- он возвращает только одно значение либо индекс, либо элемент и пустой массив для нулевого случая
Array.prototype.find = function(predictFn) { const arr = this; //captures the array const result = arr.filter(predictFn) //returning a first value return result.length == 0 ? undefined : result[0] }
выше - полифилл для find
, аналогично тому, как вы можете написать полифилл и для findIndex
.
в аналогичной зоне доступны другие функции, например, для indexOf
и includes
, вы можете прочитать о них здесь: https://hiraljs.medium.com/indexof-vs-includes-30ce7a356360
Когда дело доходит до использования, я нахожу includes
чище и не буду использовать другие функции, пока у меня не появятся веские причины для их использования.