diff options
author | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:43:23 -0500 |
---|---|---|
committer | Peter Bengtsson <mail@peterbe.com> | 2020-12-08 14:43:23 -0500 |
commit | 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 (patch) | |
tree | a9ef8ac1e1b8fe4207b6d64d3841bfb8990b6fd0 /files/uk/web/javascript/reference/global_objects/array/find | |
parent | 074785cea106179cb3305637055ab0a009ca74f2 (diff) | |
download | translated-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.html | 233 |
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 => 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 <= Math.sqrt(element)) { + if (element % start++ < 1) { + return false; + } + } + return element > 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 >>> 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 < len + while (k < 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> |