Какой тип данных возвращает метод find

от admin

Array.prototype.find()

Метод find() возвращает значение первого найденного в массиве элемента, которое удовлетворяет условию переданному в callback функции. В противном случае возвращается undefined .

Также смотрите метод findIndex() , который возвращает индекс найденного в массиве элемента вместо его значения.

Если вам нужно найти позицию элемента или наличие элемента в массиве, используйте Array.prototype.indexOf() или Array.prototype.includes() соответственно.

Синтаксис

Параметры

Функция, вызывающаяся для каждого значения в массиве, принимает три аргумента:

Текущий обрабатываемый элемент в массиве.

Индекс текущего обрабатываемого элемента в массиве.

Массив, по которому осуществляется проход.

Необязательный параметр. Значение, используемое в качестве this при выполнении функции callback .

Возвращаемое значение

Значение элемента из массива, если элемент прошёл проверку, иначе undefined .

Описание

Метод find вызывает переданную функцию callback один раз для каждого элемента, присутствующего в массиве, до тех пор, пока она не вернёт true . Если такой элемент найден, метод find немедленно вернёт значение этого элемента. В противном случае, метод find вернёт undefined . До Firefox 34 функция callback не вызывалась для «дырок» в массивах (bug 1058394).

Функция callback вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.

Если в метод find был передан параметр thisArg , при вызове callback он будет использоваться в качестве значения this . В противном случае в качестве значения this будет использоваться значение undefined .

Метод find не изменяет массив, для которого он был вызван.

Диапазон элементов, обрабатываемых методом find , устанавливается до первого вызова функции callback . Элементы, добавленные в массив после начала выполнения метода find , не будут посещены функцией callback . Если существующие, непосещение элементы массива изменяются функцией callback , их значения, переданные в функцию, будут значениями на тот момент времени когда метод find посетит их; удалённые элементы все ещё будут посещены.

Примеры

Пример: поиск простого числа в массиве

Следующий пример находит в массиве положительных чисел элемент, являющийся простым числом (либо возвращает undefined , если в массиве нет простых чисел).

Полифил

Этот метод был добавлен в спецификации ECMAScript 6 и пока может быть недоступен во всех реализациях JavaScript. Однако, вы можете использовать следующий сниппет в качестве полифила:

Какой тип данных возвращает метод find

Поиск по массиву будет искать по тем критериям, которые вы придумали.

Время чтения: 5 мин

  1. Кратко
  2. Пример
  3. Интерактивный пример
  4. Как пишется
  5. Как понять

Обновлено 29 мая 2022

Кратко

Скопировать ссылку на секцию «Кратко» Скопировано

Метод массива find ( ) вернёт первый найденный в массиве элемент, который подходит под условие в переданной колбэк-функции. Если в массиве не найдётся ни одного подходящего элемента, то вернётся значение undefined .

Пример

Скопировать ссылку на секцию «Пример» Скопировано

Опишем функцию, которая позволит определить, есть ли в списке дел моё любимое занятие. Поставим в константу просмотр сериальчиков и будем проверять: если занятие из ToDo-списка совпадает с моим хобби, то вернём его. В списке дел на завтра нет просмотра сериалов, а значит, вернётся undefined .

Интерактивный пример

Скопировать ссылку на секцию «Интерактивный пример» Скопировано

Как пишется

Скопировать ссылку на секцию «Как пишется» Скопировано

В метод find ( ) необходимо передать аргументом функцию. Функция должна возвращать булевое значение true или false . find ( ) вернёт первый элемент, на котором переданная функция-колбэк вернула true .

Чтобы получить необходимый элемент, нужно определить условие поиска. В этом нам поможет функция-предикат. Предикат — это функция, которая возвращает булевое значение.

От результата выполнения функции зависит, вернёт ли find ( ) подходящий элемент:

  • true — элемент проходит проверку.
  • false — элемент не проходит проверку.

Опишем функцию-предикат is Odd , которая проверяет, является ли число нечётным: проверим остаток от деления на 2, и если остаток равен 1, то число нечётное:

Протестируем функцию на двух наборах данных. Первый набор состоит только из чётных значений. Второй массив включает в себя нечётные значения: 17, 19, 21.

Когда мы запустим метод find ( ) у первого массива, то нам вернётся undefined , так как ни одно значение не подходит под условие. В случае со вторым набором вернётся число 17 и только оно, потому что это число первое удовлетворило значению.

Функция, которую мы передаём в метод find , принимает три параметра:

  • element — элемент массива в текущей итерации;
  • index — индекс текущего элемента;
  • arr — сам массив, который перебираем.

В коде is Odd мы не стали объявлять параметры index и arr , потому что не используем их.

Как понять

Скопировать ссылку на секцию «Как понять» Скопировано

Метод find ( ) возвращает элемент, который соответствует описанному в функции-предикате условию. Реализовать такую логику можно и через for , но метод find ( ) позволяет это сделать проще.

Ниже показан пример того, как решить задачу без find ( ) . Если мы уберём число 2 из массива, то функция будет возвращать undefined .

☝️ Обратите внимание: после того, как нужный элемент был найден, из функции find Two возвращается значение. Это ведёт к прерыванию цикла for . Мы сделали так, чтобы полностью симулировать работу метода find ( ) — он заканчивает работу сразу, как только нашёл нужный элемент. Это называется оптимизация. Не стоит тратить ресурс на то, что уже сделано и не пригодится в дальнейшем.

find ( ) позволит писать меньше кода и сделать его более понятным:

Методы .filter ( ) и find ( ) похожи. Главное отличие find ( ) от filter ( ) в том, что find ( ) возвращает первый подходящий элемент, а filter ( ) вернёт массив со всеми подходящими элементами.

Вариант реализации через .filter ( ) :

Читайте также

Функция как тип данных

С функцией можно работать, как с любым другим типом данных: сохранять в переменную, передавать, возвращать из функции.

Метод find()

Возвращает значение первого элемента в массиве, который соответствует условию в переданной функции.

Спецификация: ECMAScript 2015 (6th Edition, ECMA-262)

Синтаксис

Параметры

  • currentValue – значение текущего элемента.
  • index – индекс массива текущего элемента.
  • arr – массив, к которому принадлежит текущий элемент (по которому осуществляется проход).

Возвращаемое значение

Возвращает значение первого элемента массива, для которого функция обратного вызова возвратит true , если ни один элемент не удовлетворяет условию в переданной функции – возвращает undefined .

Описание

  • Если он находит элемент массива, для которого callback возвращает логическое значение true , find() возвращает значение этого элемента массива (и не проверяет оставшиеся значения).
  • В противном случае find() возвращает undefined .

Примечание: Метод find() не вызывает функцию для элементов массива, которые не имеют значений.

Примечание: Метод find() не изменяет исходный массив.

Примеры

В следующем примере метод find используется для того, чтобы найти нечетное число в массиве:

VBA Excel. Метод Find объекта Range

Метод Find объекта Range предназначен для поиска ячейки и сведений о ней в заданном диапазоне по ее значению, формуле и примечанию. Чаще всего этот метод используется для поиска в таблице ячейки по слову, части слова или фразе, входящей в ее значение.

Синтаксис метода Range.Find

Expression – это переменная или выражение, возвращающее объект Range, в котором будет осуществляться поиск.

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

Метод Range.Find возвращает объект Range, представляющий из себя первую ячейку, в которой найдена поисковая фраза (параметр What). Если совпадение не найдено, возвращается значение Nothing.

Если необходимо найти следующие ячейки, содержащие поисковую фразу, используется метод Range.FindNext.

Параметры метода Range.Find

  • xlValues (-4163) – значения;
  • xlComments (-4144) – примечания*;
  • xlNotes (-4144) – примечания*;
  • xlFormulas (-4123) – формулы.
  • xlWhole (1) – полное совпадение;
  • xlPart (2) – частичное совпадение.
  • xlByRows (1) – поиск по строкам;
  • xlByColumns (2) – поиск по столбцам.
  • xlNext (1) – поиск вперед;
  • xlPrevious (2) – поиск назад.
  • False (0) – поиск без учета регистра (по умолчанию);
  • True (1) – поиск с учетом регистра.
  • False (0) – двухбайтовый символ может соответствовать однобайтовому символу;
  • True (1) – двухбайтовый символ должен соответствовать только двухбайтовому символу.

* Примечания имеют две константы с одним значением. Проверяется очень просто: MsgBox xlComments и MsgBox xlNotes .

В справке Microsoft тип данных всех параметров, кроме SearchDirection, указан как Variant.

Знаки подстановки для поисковой фразы

Условные знаки в шаблоне поисковой фразы:

  • ? – знак вопроса обозначает любой отдельный символ;
  • * – звездочка обозначает любое количество любых символов, в том числе ноль символов;

Простые примеры

При использовании метода Range.Find в VBA Excel необходимо учитывать следующие нюансы:

  1. Так как этот метод возвращает объект Range (в виде одной ячейки), присвоить его можно только объектной переменной, объявленной как Variant, Object или Range, при помощи оператора Set.
  2. Если поисковая фраза в заданном диапазоне найдена не будет, метод Range.Find возвратит значение Nothing. Обращение к свойствам несуществующей ячейки будет генерировать ошибки. Поэтому, перед использованием результатов поиска, необходимо проверить объектную переменную на содержание в ней значения Nothing.

В примерах используются переменные:

  • myPhrase – переменная для записи поисковой фразы;
  • myCell – переменная, которой присваивается первая найденная ячейка, содержащая поисковую фразу, или значение Nothing, если поисковая фраза не найдена.

Пример 1

В этом примере мы присваиваем переменной myPhrase значение для поиска – «стакан» . Затем проводим поиск этой фразы в диапазоне «A1:L30» с присвоением результата поиска переменной myCell. Далее проверяем переменную myCell, не содержит ли она значение Nothing, и выводим соответствующие сообщения.

Ознакомьтесь с работой кода VBA в случаях, когда в диапазоне «A1:L30» есть ячейка со строкой, содержащей подстроку «стакан» , и когда такой ячейки нет.

Пример 2

Теперь посмотрим, как метод Range.Find отреагирует на поиск числа. В качестве диапазона поиска будем использовать первую строку активного листа Excel.

Несмотря на то, что мы присвоили переменной числовое значение, метод Range.Find найдет ячейку со значением и 526,15 , и 129526,15 , и 526,15254 . То есть, как и в предыдущем примере, поиск идет по подстроке.

Чтобы найти ячейку с точным соответствием значения поисковой фразе, используйте константу xlWhole параметра LookAt:

Аналогично используются и другие необязательные параметры. Количество «лишних» запятых перед необязательным параметром должно соответствовать количеству пропущенных компонентов, предусмотренных синтаксисом метода Range.Find, кроме случаев указания необязательного параметра по имени, например: LookIn:=xlValues . Тогда используется одна запятая, независимо от того, сколько компонентов пропущено.

Пример 3

Допустим, у нас есть многострочная база данных в Excel. В первой колонке находятся даты. Нам необходимо создать отчет за какой-то период. Найти номер начальной строки для обработки можно с помощью следующего кода:

Несмотря на то, что в ячейке дата отображается в виде текста, ее значение хранится в ячейке в виде числа. Поэтому текстовый формат необходимо перед поиском преобразовать в формат даты.

58 комментариев для “VBA Excel. Метод Find объекта Range”

21/08/20
как задать поиск точного, но регистронезависимого значения ?
напр. дано
Иванов
диван
Иван
ивановский район

myPhrase = «иван»
машина должна найти 4-ое слово «Иван»

  • LookAt:=1 – поиск полного совпадения искомой фразы со значением ячейки. Указывать обязательно, так как по умолчанию – поиск по частичному совпадению.
  • MatchCase:=0 – поиск без учета регистра. Указывать не обязательно, так как используется по умолчанию.

а как выделить цветом и/или проинформировать о том что это третья ячейка ?

Заливка найденной ячейки зеленым цветом, просмотр ее адреса и номера строки:

А как задать поиск точного, но регистрозависимого значения, с поиском совпадения внутри, но с учетом последних двух символов, в данном примере это _5?
напр. дано
Иванов_123
диван_123
Иван_2_5
Иван_3
Иван_321_3
ивановский район_521

myPhrase = “Иван, где в конце _5”
машина должна найти 3-е слово “Иван_2_5”

Привет, Иван! Так как в начале вопроса написано «А как задать поиск точного, но регистрозависимого значения…», я в предпоследней строке (myPhrase = “иван, где в конце _5”) исправил строчную «и» на заглавную.

  • * – звездочка обозначает любое количество любых символов.
  • LookAt:=2 – поиск частичного совпадения искомой фразы со значением ячейки. Указывать не обязательно, так как используется по умолчанию.
  • MatchCase:=1 – поиск с учетом регистра. Указывать обязательно, так как по умолчанию – поиск без учета регистра.

Привет Евгений! Благодарю! Пусть остается регистронезависимый.
И хотелось бы увидеть еще один пример, где слово Иван — есть переменная, но с окончанием «*_5»
Предположим переменная — Dim myIvan As Range
Как в этом случае будет выглядеть запись синтаксиса?

Если оставить регистронезависимый поиск по частичному совпадению, тогда параметры поиска можно не указывать:

Здравствуйте! Помогите пожалуйста написать код … При условии, что есть диапазон со значениями дат, а нужно произвольную ячейку с датой сравнить с этим диапазоном. Если не находит совпадений то оставить эту дату в этой ячейке. Спасибо заранее

Здравствуйте. Если в искомом диапазоне есть два и > искомых значения и все эти значения нужно вывести, например, в MsgBox или debug.print. С помощью цикла задача выполняется достаточно легко. А как это сделать с помощью Find, ведь он ищет только первое значение, т.е. как-то нужно включить опцию «найти все» ?

Добрый день, Вадим!
Для продолжения поиска используйте метод Range.FindNext.

Как задать поиск после указанной строки?

Привет, Кирилл!
Для указания строки используйте параметр After . Например, после 10 строки (то есть с 11-й):

Здравствуйте.
Подскажите, а откуда информация что .Find работает быстрее циклов VBA?

Добрый день, Антон!
Это была ошибка. Тест на моем компьютере показал, что цикл For Each… Next находит значение в последней ячейке первого столбца за 1,53 сек., а метод Find – за 2,20 сек. Спасибо за обратную связь!

Здравствуйте, Евгений. Имеется таблица. В левой колонке — цифры(отфильтрованы в порядке возрастания). Задача-по значению первой колонке найти остальные параметры. Точного совпадения нет. Написать поиск в VBA.(что-то типа ИНДЕКС(ПОИСКПОЗ) или ВПР в Excel). Поиск с помощью FIND-ничего не дает. Требуется только точное совпадение. Поиск в цикле-та же песня. Подскажите пожалуйста как решить этот вопрос. Cпасибо.

Здравствуйте, Михаил!
Возможно, вам подойдет метод WorksheetFunction.Match (поиск позиции).

Помогите плизз. Есть 3 столбца. Надо оставить «Дебитор доставки» остальные удалить. Создаю 2 запроса одинаковых. С 3 столбцом все нормально а вот 1-2 удаляются вместе. И как задать в одном запросе удаление дебитора и юр. адрес клиента
( Set A = .Find(What:=(«Юр. адрес клиента»,»Дебитор»), LookIn:=xlValues, lookat:=xlPart) ) — так не работает.
Дебитор
Дебитор доставки
Юр. адрес клиента

Сделал. Сначала переименовал, а потом удалил.

Добрый день. Очень интересная статья
Подскажите пожалуйста, как добиться следующего цикла.
Например: надо найти ячейки со словом «ЖКХ» и «квартплата» в столбце А и проставить это наименование в столбец В.
А1 оплата ЖКХ
А2 квартплата за Иванова
А3 квартплата за ЖКХ

Соответственно в столбце В должно быть
В1 ЖКХ
В2 квартплата
В3 квартплата ЖКХ (или хотябы по первому поисковому слову ЖКХ)
Заранее спасибо.

Здравствуйте, Сергей!
Для поиска совпадений в количестве более одного вместе с методом Range.Find для продолжения поиска используется метод Range.FindNext:

В этом примере слово «ЖКХ» заменит слово «квартплата» в ячейке справа, если они оба будут найдены в одной ячейке слева.

Доброго времени суток, Евгений! Подскажите, пожалуйста, есть файл в нем надо найти скрытое слово, то есть мы не знаем что ищем. Как в таком случае искользовать VBA Find function? Спасибо!

Добрый день, Ainur!
Если искомое слово (или его часть) неизвестно, то найти его с помощью метода Find невозможно.

Евгений, огромное спасибо за помощь

Здравствуйте!
Спасибо за статью.
Может, кто знает: как найти ячейку по значению, если в ней формула? И в VBA, и в таблицах любопытно.

Добрый день!
Значения ищутся по умолчанию, не зависимо от того, есть ли в ячейке формула или нет. А вот чтобы найти формулу, необходимо указать явно, что ищется формула:

Спасибо.
Что нужно указать, чтобы найти ячейку, в которой формула, но ищется которая по значению?

Нужно проверить наличие формулы:

Т.е. .Find в этом случае не работает ∎
Ждал такого ответа.
Спасибо и примите восхищение поддержкой.

Евгений, здравствуйте! Огромное спасибо за статью. Подскажите пожалуйста, подойдет ли Find Range для решения следующей задачи:
Имеется некоторая база с неким продуктом, у каждого продукта свой каталожный номер, каталожные номера записаны в столбец, а в строках содержится остальная информация по товару (цена, производитель, срок гарантии, импортер и т.д.), можно ли использовать Find для автоматического заполнения строки после ввода каталожного номера в ячейку? Если совсем обывательским языком говорить, то программа должна делать следующее: введенное в ячейку значение сравнивает со всеми значениями ячеек в этом столбце, которые расположены выше изменяемой ячейки. Если каталожный номер (читай значение) совпадает с уже встречающимся выше каталожным номером, то программа автоматически заполняет строку значениями, которые соответствуют данному кат. номеру, в ином случае, когда совпадающего значения не найдено — оставляет строку пустой. Спасибо за ваше время и еще раз за вашу статью!

Здравствуйте, Дмитрий!
Вы можете использовать метод Range.Find для решения своей задачи. А если столбец с каталожными номерами является первым в таблице, вы также можете использовать метод WorksheetFunction.VLookup.

Добрый день.
Подскажите, как присвоить из таблицы нужное мне значение (Цена без НДС) ?
Прошу прощения, на работе нет программиста, приходится самому учиться(
Пример ниже не правильный.

Читать:
Veeam agent что это

Related Posts