Skip to content

Commit

Permalink
update(JS): web/javascript/reference/global_objects/array/find/index.…
Browse files Browse the repository at this point in the history
…md (#269)

* update(JS): web/javascript/reference/global_objects/array/find/index.md

* update(JS): web/javascript/reference/global_objects/array/find/index.md

Co-authored-by: Vitalii Perehonchuk <[email protected]>
  • Loading branch information
undead404 and viperehonchuk authored Feb 19, 2022
1 parent ee4cfa6 commit 54e09ac
Showing 1 changed file with 77 additions and 56 deletions.
133 changes: 77 additions & 56 deletions files/uk/web/javascript/reference/global_objects/array/find/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,16 +11,15 @@ tags:
- Polyfill
browser-compat: javascript.builtins.Array.find
---

{{JSRef}}

Метод `find()` повертає значення першого елементу в даному масиві, яке задовольняє передану функцію перевірки. Якщо жоден елемент не задовольняє перевіркову функцію, буде повернуто {{jsxref("undefined")}}.
Метод `find()` (знайти) повертає значення першого елементу в даному масиві, яке задовольняє передану функцію перевірки. Якщо жоден елемент не задовольняє перевіркову функцію, буде повернуто {{jsxref("undefined")}}.

{{EmbedInteractiveExample("pages/js/array-find.html","shorter")}}

- Якщо потрібен **індекс** знайденого елементу в масиві, використовуйте
{{jsxref("Array.findIndex", "findIndex()")}}.
- Якщо потрібно знайти **індекс вже наявного значення**, застосуйте
{{jsxref("Array.prototype.indexOf()")}}. (Вона схожа до {{jsxref("Array.findIndex", "findIndex()")}}, проте перевіряє кожний елемент на рівність зі значенням замість використання перевіркової функції.)
- Якщо потрібен **індекс** знайденого елементу в масиві, використовуйте {{jsxref("Array.findIndex", "findIndex()")}}.
- Якщо потрібно знайти **індекс вже наявного значення**, застосуйте {{jsxref("Array.prototype.indexOf()")}}. (Вона схожа до {{jsxref("Array.findIndex", "findIndex()")}}, проте перевіряє кожний елемент на рівність зі значенням замість використання перевіркової функції.)
- Якщо потрібно визначити, чи якесь значення **наявне** в масиві, використайте
{{jsxref("Array.prototype.includes()")}}. Знову ж таки, цей метод перевіряє кожний елемент на рівність із переданим значенням замість застосування перевіркової функції.
- Якщо ж потрібно взнати, чи хоч якийсь елемент задовольняє передану перевіркову функцію, слід застосувати {{jsxref("Array.prototype.some()")}}.
Expand All @@ -29,19 +28,33 @@ browser-compat: javascript.builtins.Array.find

```js
// Стрілкова функція
find((element) => { /* ... */ } )
find((element, index) => { /* ... */ } )
find((element, index, array) => { /* ... */ } )
find((element) => {
/* ... */
});
find((element, index) => {
/* ... */
});
find((element, index, array) => {
/* ... */
});

// Функція зворотного виклику
find(callbackFn)
find(callbackFn, thisArg)
find(callbackFn);
find(callbackFn, thisArg);

// Функція зворотного виклику, оголошена на місці
find(function(element) { /* ... */ })
find(function(element, index) { /* ... */ })
find(function(element, index, array){ /* ... */ })
find(function(element, index, array) { /* ... */ }, thisArg)
find(function (element) {
/* ... */
});
find(function (element, index) {
/* ... */
});
find(function (element, index, array) {
/* ... */
});
find(function (element, index, array) {
/* ... */
}, thisArg);
```

### Параметри
Expand All @@ -51,67 +64,75 @@ find(function(element, index, array) { /* ... */ }, thisArg)
- : Функція, яка буде виконана на кожному елементі масиву, приймає три аргументи:

- `element`
- : Даний елемент в масиві.
- : Поточний елемент у масиві.
- `index` {{optional_inline}}
- : Індекс (порядковий номер) даного елементу в масиві.
- : Індекс (порядковий номер) поточного елемента в масиві.
- `array` {{optional_inline}}
- : Масив, на якому було викликано функцію `find`.
- : Масив, на якому було викликано метод `find`.

Функція зворотного виклику мусить повернути [істинне](/uk/docs/Glossary/Truthy) значення, аби вказати, що відповідний елемент було знайдено.

- `thisArg` {{optional_inline}}
- : Об'єкт, який буде використано як значення {{jsxref("Operators/this", "this")}} всередині `callbackFn`.

### Результат

**Значення** **першого** елементу в масиві, який задовольняє передану перевіркову функцію. Якщо такого не знайшлося, буде повернуто {{jsxref("undefined")}}.
Перший елемент масиву, що задовольняє передану перевіркову функцію.
Інакше – повертається {{jsxref("undefined")}}.

## Опис

Метод `find` виконує функцію `callbackFn` один раз для кожного індексу в масиві, аж поки `callbackFn` не поверне [істинне](/uk/docs/Glossary/Truthy) значення. В цьому випадку `find` одразу повертає значення цього елементу. Інакше `find` поверне {{jsxref("undefined")}}.
Метод `find` виконує функцію `callbackFn` один раз для кожного індексу в масиві, аж поки `callbackFn` не поверне [істинне](/uk/docs/Glossary/Truthy) значення.
В цьому випадку `find` одразу повертає значення цього елементу. Інакше `find` поверне {{jsxref("undefined")}}.

`callbackFn` викликається для _кожного_ індексу в масиві, а не лише для тих, які мають присвоєне значення. Це означає, що такий підхід може бути менш ефективним на розріджених масивах, у порівнянні з методами, які обробляють лише наявні значення.
`callbackFn` викликається для _кожного_ індексу в масиві, а не лише для тих, які мають присвоєне значення.
Це означає, що такий підхід може бути менш ефективним на розріджених масивах, у порівнянні з методами, які обробляють лише наявні значення.

Якщо параметр `thisArg` було передано до функції `find`, його буде використано як значення `this` всередині кожного виклику `callbackFn`. Якщо ж його передано не було, замість нього буде використано {{jsxref("undefined")}}.
Якщо параметр `thisArg` було передано до функції `find`, його буде використано як значення `this` всередині кожного виклику `callbackFn`.
Якщо ж його передано не було, замість нього буде використано {{jsxref("undefined")}}.

Метод `find` не змінює масив, на якому його викликають, хоча функція, яка передається до `callbackFn`, може це робити. Якщо так, то елементи, опрацьовані функцією `find` задаються _перед_ першим викликом `callbackFn`. Таким чином:
Метод `find` не змінює масив, на якому його викликають, хоча функція, яка передається як `callbackFn`, може це робити.
В такому випадку елементи, що будуть опрацьовані функцією `find`, задаються _перед_ першим викликом `callbackFn`.
Таким чином:

- `callbackFn` не опрацює будь-які елементи, додані до масиву після того, як почався виклик методу `find`.
- Елементи, що присвоєні за вже опрацьованими індексами, або ж за індексами за межами діапазону, не будуть опрацьовані `callbackFn`.
- Якщо наявний, але ще не опрацьований елемент масиву змінюється функцією `callbackFn`, його значення, що потрапить у `callbackFn`, буде таким, яке цей елемент матиме на момент опрацювання функцією `find` його індексу.
- Елементи, які {{jsxref("Operators/delete", "видалені")}}, все ж таки будуть опрацьовані.
- {{jsxref("Operators/delete", "Видалені")}} елементи все ж будуть опрацьовані.

> **Обережно:** Одночасні модифікації такого типу, як описано вище, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (окрім особливих випадків).
> **Застереження:** Одночасні модифікації такого типу, як описано вище, часто приводять до коду, який важко зрозуміти. Загалом заведено уникати такого запису (крім особливих випадків).
## Приклади

### Знайти об'єкт в масиві за однією з його властивостей

```js
const inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
{ name: 'яблука', quantity: 2 },
{ name: 'банани', quantity: 0 },
{ name: 'вишні', quantity: 5 },
];

function isCherries(fruit) {
return fruit.name === 'cherries';
return fruit.name === 'вишні';
}

console.log(inventory.find(isCherries));
// { name: 'cherries', quantity: 5 }
// { name: 'вишні', quantity: 5 }
```

#### Застосування стрілкової функції та деструктуризації

```js
const inventory = [
{name: 'apples', quantity: 2},
{name: 'bananas', quantity: 0},
{name: 'cherries', quantity: 5}
{ name: 'яблука', quantity: 2 },
{ name: 'банани', quantity: 0 },
{ name: 'вишні', quantity: 5 },
];

const result = inventory.find( ({ name }) => name === 'cherries' );
const result = inventory.find(({ name }) => name === 'вишні');

console.log(result) // { name: 'cherries', quantity: 5 }
console.log(result); // { name: 'вишні', quantity: 5 }
```

### Знайти просте число в масиві
Expand All @@ -137,39 +158,39 @@ console.log([4, 5, 8, 12].find(isPrime)); // 5

```js
// Оголосимо масив з відсутніми елементами 2, 3, і 4
const array = [0,1,,,,5,6];
const array = [0, 1, , , , 5, 6];

// Покаже всі індекси, а не лише ті, що мають присвоєне значення
array.find(function(value, index) {
console.log('Visited index ', index, ' with value ', value);
array.find(function (value, index) {
console.log('Відвідано індекс ', index, ' зі значенням ', value);
});

// Покаже всі індекси, включно з видаленими
array.find(function(value, index) {
array.find(function (value, index) {
// Видаляємо 5-й елемент під час першої ітерації
if (index === 0) {
console.log('Deleting array[5] with value ', array[5]);
console.log('Видалення array[5] зі значенням ', array[5]);
delete array[5];
}
// 5-й елемент все ж опрацьовується, хоча ми його видалили
console.log('Visited index ', index, ' with value ', value);
console.log('Відвідано індекс ', index, ' зі значенням ', value);
});
// очікуваний вивід:
// Visited index 0 with value 0
// Visited index 1 with value 1
// Visited index 2 with value undefined
// Visited index 3 with value undefined
// Visited index 4 with value undefined
// Visited index 5 with value 5
// Visited index 6 with value 6
// Deleting array[5] with value 5
// Visited index 0 with value 0
// Visited index 1 with value 1
// Visited index 2 with value undefined
// Visited index 3 with value undefined
// Visited index 4 with value undefined
// Visited index 5 with value undefined
// Visited index 6 with value 6
// Відвідано індекс 0 зі значенням 0
// Відвідано індекс 1 зі значенням 1
// Відвідано індекс 2 зі значенням undefined
// Відвідано індекс 3 зі значенням undefined
// Відвідано індекс 4 зі значенням undefined
// Відвідано індекс 5 зі значенням 5
// Відвідано індекс 6 зі значенням 6
// Видалення array[5] зі значенням 5
// Відвідано індекс 0 зі значенням 0
// Відвідано індекс 1 зі значенням 1
// Відвідано індекс 2 зі значенням undefined
// Відвідано індекс 3 зі значенням undefined
// Відвідано індекс 4 зі значенням undefined
// Відвідано індекс 5 зі значенням undefined
// Відвідано індекс 6 зі значенням 6
```

## Специфікації
Expand All @@ -182,7 +203,7 @@ array.find(function(value, index) {

## Дивіться також

- Поліфіл до `Array.prototype.find` присутній у [`core-js`](https://github.com/zloirock/core-js#ecmascript-array)
- [Поліфіл до `Array.prototype.find` у `core-js`](https://github.com/zloirock/core-js#ecmascript-array)
- {{jsxref("Array.prototype.findIndex()")}} – знайти елемент і повернути його індекс
- {{jsxref("Array.prototype.includes()")}} – перевірити, чи значення присутнє в масиві
- {{jsxref("Array.prototype.filter()")}} – отримати підхожі елементи
Expand Down

0 comments on commit 54e09ac

Please sign in to comment.