Pull to refresh

Comments 19

Аналогично существует метод findLastIndex(), который ищет элемент по индексу

Ищет индекс элемента, а не элемент по индексу

но если массив большой и вы знаете, что элемент находится ближе к концу, то можно использовать метод findLast

Думаю, основное предназначение findLast не в том, чтоб меньше перебирать, а в том, чтоб найти последний, что, собственно, и отражено в названии

Исправлено, спасибо. FindLast как раз нужен для обхода с конца. Просто последний элемент можно получить и по индексу или метод at.

Я думал из контекста понятно, что findLatest для поиска последнего по условию.

FindLast как раз нужен для обхода с конца

Нет. Он нужен для поиска последнего элемента, удовлетворяющего условию. Под капотом он может как угодно ходить. Или буду рад ссылке на документацию.

Вы в статье противопоставляете его методу find, что в корне неправильно, т.к. при наличии более одного подходящего элемента они вернут разные элементы

Исправлено, спасибо

Аналогично существует метод findLastIndex(), который ищет индекс элемента, удовлетворяющего определённому условию

Не исправлено, это неправильное определение

Пожалуйста: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findLast

The findLast() method iterates the array in reverse order and returns the value of the first element that satisfies the provided testing function.

Он не просто выводит последний элемент, который удовлетворят условию, а делает это, проходя массив с конца.

Да, противопоставляю, find ищет первый элемент с начала, а findLast первый элемент с конца.

По поводу прохода согласен.

Да, противопоставляю, find ищет первый элемент с начала, а findLast первый элемент с конца.

Этого в статье нет

Иммутабельность массивов хороша для недопуска ошибок, но каждый раз заставляет пользователя докупать ещё одну планку памяти.

В любых современных JS-движках поколенческий GC, который соберёт такие короткоживущие массивы почти забесплатно.

Память по пути всё равно выделится. А в синхронном цикле до окончания прохода эвент лупа можно насобирать таких клонов вообще прилично, особенно если оно там каскадно дальше пойдёт и сверху цепочки вызовов функций где каждый раз такой иммутабельный слайс/фильтр/мэп по одному проходу на каждую функцию. GC придёт и всех убьёт, но в конце. В этом поинт, не в утечке памяти.

Возможно, есть какой-либо архитектурный выход из ситуации где не нужен бы был клон списков значений? Но пока увы.

Я в целом с вами не спорю про вред излишних копирований :) Просто немного удивился, что в первую очередь вспомнили про пямять, а не про время.

синхронном цикле до окончания прохода эвент лупа можно насобирать таких клонов вообще прилично

Я вот кстати не уверен, что GC просто не вклинится в середину итерации эвент-лупа. Но утверждать не буду.

если у вас такой большой синхронный цикл с таким множественным выделением памяти, то вы что-то делаете не так (например неправильно выбрали платформу для реализации проекта).

докупать ещё одну планку памяти

...и ядро процессора.

The find() method returns the first element in the provided array that satisfies the provided testing function. If no values satisfy the testing function, undefined is returned.

Метод find работает не совсем так (а если быть более точным - совсем не так), как вы написали.

`find` вернёт первый попавшийся элемент массива, который удовлетворяет условиям.
`findLast` вернёт последний элемент массива из тех, что удовлетворяет условиям.

Аналогично с findIndex и findLastIndex, только они, в отличии от первых двух - возвращают индекс элемента массива.

Вы перепутали назначение find* методов, с filter.

А что здесь не так у меня написано? Я не говорил про filter, который вернёт массив элементов. Я написал, что нам нужно найти 7, как пример поиска элемента по определенному условию.

Меня ввело в заблуждение то, как использовался console.log. С учётом UPD, которое вы добавили в статью (обход массива начинается с конца), всё встаёт на свои места.
В частности:
> FindLast обходит массив с конца
Ваши примеры верны и понятны на тему того, что вы хотели этими примерами сказать.
Прошу прощения, за досадное недоразумение.

Спасибо, благодаря вашем комментариям, я могу улучшать материал)

А почему пример не корректен? Результат может быть действительно разным, если есть повторяющиеся элементы в массиве, но в примере я показал основную задачу данного метода - оптимизировать поиск, если мы знаем, что искомое значение ближе к концу.

но в примере я показал основную задачу данного метода - оптимизировать поиск, если мы знаем, что искомое значение ближе к концу.

Все, что нужно знать о ваших знаниях

Sign up to leave a comment.

Articles