aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/array/find
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:43:23 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:43:23 -0500
commit218934fa2ed1c702a6d3923d2aa2cc6b43c48684 (patch)
treea9ef8ac1e1b8fe4207b6d64d3841bfb8990b6fd0 /files/uk/web/javascript/reference/global_objects/array/find
parent074785cea106179cb3305637055ab0a009ca74f2 (diff)
downloadtranslated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.tar.gz
translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.tar.bz2
translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.zip
initial commit
Diffstat (limited to 'files/uk/web/javascript/reference/global_objects/array/find')
-rw-r--r--files/uk/web/javascript/reference/global_objects/array/find/index.html233
1 files changed, 233 insertions, 0 deletions
diff --git a/files/uk/web/javascript/reference/global_objects/array/find/index.html b/files/uk/web/javascript/reference/global_objects/array/find/index.html
new file mode 100644
index 0000000000..a08566da73
--- /dev/null
+++ b/files/uk/web/javascript/reference/global_objects/array/find/index.html
@@ -0,0 +1,233 @@
+---
+title: Array.prototype.find()
+slug: Web/JavaScript/Reference/Global_Objects/Array/find
+tags:
+ - Array
+ - JavaScript
+ - Method
+ - Prototype
+ - polyfill
+ - Довідка
+translation_of: Web/JavaScript/Reference/Global_Objects/Array/find
+---
+<div>{{JSRef}}</div>
+
+<p>Метод <strong><code>find()</code></strong> повертає <strong>значення</strong> <strong>першого елемента </strong>в масиві, що задовільняє передану функцію тестування. Інакше вертається {{jsxref("undefined")}}.</p>
+
+<p>{{EmbedInteractiveExample("pages/js/array-find.html")}}</p>
+
+<div class="hidden">
+<p>The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> and send us a pull request.</p>
+</div>
+
+<p>Зверніть увагу також на метод {{jsxref("Array.prototype.findIndex", "findIndex()")}}, що натомість повертає <strong>індекс</strong> знайденого елемента масиву, а не значення.</p>
+
+<p>Якщо вам необхідно знайти позицію елемента або дізнатись, чи існує елемент в масиві, використовуйте {{jsxref("Array.prototype.indexOf()")}} або {{jsxref("Array.prototype.includes()")}}.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox notranslate"><var>arr.find(callback(element[, index[, array]])[, thisArg])</var></pre>
+
+<h3 id="Параметри">Параметри</h3>
+
+<dl>
+ <dt><code>callback</code></dt>
+ <dd>Функція, що виконується для кожного значення в масиві і приймає три аргументи:
+ <dl>
+ <dt><code>element</code></dt>
+ <dd>Значення поточного елемента масиву.</dd>
+ <dt><code>index</code>{{optional_inline}}</dt>
+ <dd>Індекс поточного елемента масиву.</dd>
+ <dt><code>array</code>{{optional_inline}}</dt>
+ <dd>Масив, для якого було викликано <code>find</code>.</dd>
+ </dl>
+ </dd>
+ <dt><code>thisArg</code> {{Optional_inline}}</dt>
+ <dd>Необов'язковий об'єкт, що використовується в якості <code>this</code> при виконанні <code>callback</code>.</dd>
+</dl>
+
+<h3 id="Вертає">Вертає</h3>
+
+<p><strong>Значення</strong> <strong>першого елемента</strong> в масиві, який задовольняє надану перевірочну функцію. Інакше повертається {{jsxref("undefined")}}.</p>
+
+<h2 id="Опис">Опис</h2>
+
+<p>Метод <code>find</code> виконує функцію <code>callback</code> один раз для кожного елемента в масиві, аж поки не буде знайдено такий, для якого <code>callback</code> повертає <a href="/uk/docs/Glossary/Truthy">правдиве значення</a>. Щойно такий елемент знайдено, <code>find</code> одразу ж повертає значення цього елемента. В іншому випадку, <code>find</code>  повертає {{jsxref("undefined")}}. Функція <code>callback</code> викликається для кожного індексу масиву з <code>0</code> по <code>length - 1</code> і виконується для усіх елементів, не лише для тих, які мають присвоєні значення. Це означає, що цей метод може бути менш ефективним для розріджених масивів у порівнянні з методами, які обробляють лише ті, елементи, яким присвоєні значення.</p>
+
+<p>Функція <code>callback</code> викликається з трьома аргументами: значення елемента, індекс елемента і об'єкт <code>Array</code>, перебір якого здійснюється.</p>
+
+<p>Якщо параметр <code>thisArg</code> передано до <code>find</code>, його буде використано як <code>this</code> для кожного виклику <code>callback</code>. Якщо його не передано, тоді використовуватиметься {{jsxref("undefined")}}.</p>
+
+<p>Метод <code>find()</code> не змінює масив, для якого викликається.</p>
+
+<p>Діапазон елементів, що їх має обробити <code>find</code>, визначається ще до першого виклику функції <code>callback</code>. Тому <code>callback</code> не обробляє елементи, додані до масиву після того, як почалося виконання <code>find</code>. Якщо існуючий, ще не опрацьований елемент масиву, змінюється функцією <code>callback</code>, його значення, що передається до <code>callback</code>, буде значенням на той момент, коли <code>find</code> доходить до індексу цього елемента. Видалені елементи все одно опрацьовуються.</p>
+
+<h2 id="Приклади">Приклади</h2>
+
+<h3 id="Знайти_обєкт_в_масиві_за_однією_з_його_властивостей">Знайти об'єкт в масиві за однією з його властивостей</h3>
+
+<pre class="brush: js notranslate">var inventory = [
+ {name: 'яблука', quantity: 2},
+ {name: 'банани', quantity: 0},
+ {name: 'вишні', quantity: 5}
+];
+
+function findCherries(fruit) {
+ return fruit.name === 'вишні';
+}
+
+console.log(inventory.find(findCherries));
+// виводить { name: 'вишні', quantity: 5 }
+</pre>
+
+<h4 id="Використання_стрілочної_функції_ES2015">Використання стрілочної функції ES2015</h4>
+
+<pre class="brush: js notranslate">const inventory = [
+ {name: 'яблука', quantity: 2},
+ {name: 'банани', quantity: 0},
+ {name: 'вишні', quantity: 5}
+];
+
+const result = inventory.find( fruit =&gt; fruit.name === 'вишні' );
+
+console.log(result) // { name: 'вишні', quantity: 5 }
+</pre>
+
+<h3 id="Знайти_просте_число_у_масиві">Знайти просте число у масиві</h3>
+
+<p>Наступний приклад знаходить елемент у масиві, який є простим числом (або повертає {{jsxref("undefined")}}, якщо простого числа немає):</p>
+
+<pre class="brush: js notranslate">function isPrime(element, index, array) {
+ var start = 2;
+ while (start &lt;= Math.sqrt(element)) {
+ if (element % start++ &lt; 1) {
+ return false;
+ }
+ }
+ return element &gt; 1;
+}
+
+[4, 6, 8, 12].find(isPrime); // вертає undefined, простих чисел не знайдено
+[4, 5, 8, 12].find(isPrime); // вертає 5
+</pre>
+
+<p>Наступні приклади демонструють, що неіснуючі та видалені елементи теж опрацьовуються, і що значення, передане до функції зворотного виклику - це їхнє значення на момент перевірки.</p>
+
+<pre class="brush: js notranslate">// Створити масив без елементів за індексами 2, 3 та 4
+const array = [0,1,,,,5,6];
+
+// Виводить всі індекси, не лише ті, які мають присвоєні значення
+array.find(function(value, index) {
+ console.log('Індекс ' + index + ' має значення ' + value);
+});
+
+// Виводить всі індекси, в тому числі видалені
+array.find(function(value, index) {
+
+ // Видалити елемент 5 в першій ітерації
+ if (index == 0) {
+ console.log('Видалення елемента array[5] зі значенням ' + array[5]);
+ delete array[5];
+ }
+ // Елемент 5 перевіряється, хоч і був видалений
+ console.log('Індекс ' + index + ' має значення ' + value);
+});
+// очікуваний результат:
+// Видалення елемента array[5] зі значенням 5
+// Індекс 0 має значення 0
+// Індекс 1 має значення 1
+// Індекс 2 має значення undefined
+// Індекс 3 має значення undefined
+// Індекс 4 має значення undefined
+// Індекс 5 має значення undefined
+// Індекс 6 має значення 6
+</pre>
+
+<h2 id="Запасний_варіант_поліфіл">Запасний варіант (поліфіл)</h2>
+
+<p>Цей метод був доданий у ECMAScript 2015, тож, можливо, поки наявний не у всякій реалізації JavaScript. Проте, ви можете використати наступний код для забезпечення запасного варіанту <code>Array.prototype.find</code>:</p>
+
+<pre class="brush: js notranslate">// https://tc39.github.io/ecma262/#sec-array.prototype.find
+if (!Array.prototype.find) {
+ Object.defineProperty(Array.prototype, 'find', {
+ value: function(predicate) {
+ // 1. Нехай O дорівнює ? ToObject(this value).
+ if (this == null) {
+ throw new TypeError('"this" is null or not defined');
+ }
+
+ var o = Object(this);
+
+ // 2. Нехай len дорівнює ? ToLength(? Get(O, "length")).
+ var len = o.length &gt;&gt;&gt; 0;
+
+ // 3. Якщо IsCallable(predicate) дорівнює false, викинути виняток TypeError.
+ if (typeof predicate !== 'function') {
+ throw new TypeError('предикат має бути функцією');
+ }
+
+ // 4. Якщо надано thisArg, нехай T дорівнює thisArg; інакше нехай T дорівнює undefined.
+ var thisArg = arguments[1];
+
+ // 5. Нехай k дорівнює 0.
+ var k = 0;
+
+ // 6. Повторювати, поки k &lt; len
+ while (k &lt; len) {
+ // a. Нехай Pk дорівнює ! ToString(k).
+ // b. Нехай kValue дорівнює ? Get(O, Pk).
+ // c. Нехай testResult дорівнює ToBoolean(? Call(predicate, T, « kValue, k, O »)).
+ // d. Якщо testResult дорівнює true, повернути kValue.
+ var kValue = o[k];
+ if (predicate.call(thisArg, kValue, k, o)) {
+ return kValue;
+ }
+ // e. Збільшити k на 1.
+ k++;
+ }
+
+ // 7. Повернути undefined.
+ return undefined;
+ }
+ });
+}
+</pre>
+
+<p>Якщо вам потрібно забезпечити підтримку вкрай застарілих рушіїв JavaScript, в яких відсутня підтримка <code><a href="/uk/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty">Object.defineProperty</a></code>, було б краще взагалі не додавати методів до <code>Array.prototype</code> через відсутність можливості заборонити їх перебір.</p>
+
+<h2 id="Специфікації">Специфікації</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Специфікації</th>
+ <th scope="col">Статус</th>
+ <th scope="col">Коментар</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES2015', '#sec-array.prototype.find', 'Array.prototype.find')}}</td>
+ <td>{{Spec2('ES2015')}}</td>
+ <td>Первинне визначення.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-array.prototype.find', 'Array.prototype.find')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td></td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Підтримка_веб-переглядачами">Підтримка веб-переглядачами</h2>
+
+<div class="hidden">
+<p>The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> and send us a pull request.</p>
+</div>
+
+<p>{{Compat("javascript.builtins.Array.find")}}</p>
+
+<h2 id="Див._також">Див. також</h2>
+
+<ul>
+ <li>{{jsxref("Array.prototype.findIndex()")}}</li>
+ <li>{{jsxref("Array.prototype.every()")}}</li>
+</ul>