From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../reference/global_objects/array/index.html | 431 +++++++++++++++++++++ 1 file changed, 431 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/array/index.html (limited to 'files/uk/web/javascript/reference/global_objects/array/index.html') diff --git a/files/uk/web/javascript/reference/global_objects/array/index.html b/files/uk/web/javascript/reference/global_objects/array/index.html new file mode 100644 index 0000000000..18045d9c84 --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/array/index.html @@ -0,0 +1,431 @@ +--- +title: Array +slug: Web/JavaScript/Reference/Global_Objects/Array +tags: + - Array + - JavaScript + - Масив +translation_of: Web/JavaScript/Reference/Global_Objects/Array +--- +
{{JSRef}}
+ +

Array є глобальним об'єктом, що використовується для створення масивів; які є високорівневими, спископодібними об'єктами.

+ +

Створення масиву

+ +
var fruits = ["Яблуко", "Банан"];
+
+console.log(fruits.length);
+// 2
+
+ +

Доступ до елементів масиву (за індексом)

+ +
var first = fruits[0];
+// Яблуко
+
+var last = fruits[fruits.length - 1];
+// Банан
+
+ +

Обхід елементів масиву

+ +
fruits.forEach(function (item, index, array) {
+  console.log(item, index);
+});
+// Яблуко 0
+// Банан 1
+
+ +

Додавання в кінець масиву

+ +
var newLength = fruits.push("Апельсин");
+// ["Яблуко", "Банан", "Апельсин"]
+
+ +

Видалення елемента з кінця масиву

+ +
var last = fruits.pop(); // видалити Апельсин (з кінця)
+// ["Яблуко", "Банан"];
+
+ +

Видалення елемента з початку масиву

+ +
var first = fruits.shift(); // видалити Яблуко з початку
+// ["Банан"];
+
+ +

Додавання елемента до початку масиву

+ +
var newLength = fruits.unshift("Полуниця") // додади до початку
+// ["Полуниця", "Банан"];
+
+ +

Пошук індексу елемента в масиві

+ +
fruits.push("Манго");
+// ["Полуниця", "Банан", "Манго"]
+
+var pos = fruits.indexOf("Банан");
+// 1
+
+ +

Видалення елемента масиву за його індексом (позицією)

+ +
var removedItem = fruits.splice(pos, 1); // ось, як видаляється елемент
+// ["Полуниця", "Манго"]
+
+ +

Видалення елементів починаючи з певного індексу

+ +
var vegetables = ['Капуста', 'Ріпа', 'Редька', 'Морква'];
+console.log(vegetables);
+// ["Капуста", "Ріпа", "Редька", "Морква"]
+
+var pos = 1, n = 2;
+
+var removedItems = vegetables.splice(pos, n);
+// ось так видаляються елементи, n визначає кількість елементів на видалення,
+// від цієї позиції (pos) в напрямку кінця масиву.
+
+console.log(vegetables);
+// ["Капуста", "Морква"] (початковий масив змінено)
+
+console.log(removedItems);
+// ["Ріпа", "Редька"]
+ +

Копіювання масиву

+ +
var shallowCopy = fruits.slice(); // ось так робиться копія
+// ["Полуниця", "Манго"]
+
+ +

Синтаксис

+ +
[element0, element1, ..., elementN]
+new Array(element0, element1[, ...[, elementN]])
+new Array(arrayLength)
+
+ +
+
+

Параметри

+
+
+ +

elementN

+ +
+
Масив у JavaScript ініціалізується за допомогою наперед заданих елементів, за виключенням тієї ситуації коли в конструктор Array передається тільки один аргумент і він є числом (див. параметр arrayLength нижче). Зверніть увагу на те, що це спрацьовує лише у тому випадку, якщо масив створено за допомогою  конструктора Array, а не через літерали масивів створених з допомогою синтаксу квадратних дужок.
+
arrayLength
+
Якщо єдиним аргументом (вхідним параметром) конструктора Array є ціле число від 0 до 232-1 (включно), буде повернено новий JavaScript-масив з властивістю length рівною цьому числу.  Зверніть увагу, що цей масив матиме пусті слоти, а не слоти зі значеннями undefined. Якщо аргументом буде будь-яке інше число, виникне виняток RangeError.
+
+ +

Опис

+ +

Масиви - це спископодібні об'єкти, чий прототип має методи для операцій обходу та зміни масиву. Ані довжина масиву, ані типи його елементів не є незмінними. Довжина масиву може змінитись будь-коли, як і позиція даних в масиві; тому їх використання залежить від рішення програміста. Взагалі, це зручні характеристики; але якщо ці особливості не є бажаними для ваших конкретних цілей, ви можете розглянути можливість використання типізованих масивів.

+ +

Масиви не можуть використовувати рядки у якості індексів елементів (як асоціативні масиви), а тільки цілі числа(індекси). Присвоєння або звернення через не цілочисельні значення, з використанням квадратних дужок (або через крапку), не присвоїть або не отримає елемент з самого списку масиву, але присвоїть чи отримає доступ до змінної, пов'язаної з колекцією властивостей об'єкта(властивості) цього масиву. Об'єктні властивості масиву та список елементів масиву є відокремленими, і операції обходу та зміни цього масиву не застосовуються до цих іменованих властивостей.

+ +

Доступ до елементів масиву

+ +

Масиви в JavaScript індексуються з нуля: перший елемент масиву має індекс, який дорівнює 0, а індекс останнього елемента відповідає значенню властивості масиву {{jsxref("Array.length", "length")}} мінус 1. Використання неправильного індексу повертає undefined.

+ +
var arr = ['це перший елемент', 'це другий елемент'];
+console.log(arr[0]);              // виводить 'це перший елемент'
+console.log(arr[1]);              // виводить 'це другий елемент'
+console.log(arr[arr.length - 1]); // виводить 'це другий елемент'
+
+ +

Елементи масиву є властивостями об'єкта, так само, як toString є властивістю, але спроби звернутися до елемента масиву наступним чином згенерує синтаксичну помилку через неправильне ім'я властивості:

+ +
console.log(arr.0); // є синтаксична помилка
+
+ +

В масивах JavaScript немає нічого особливого, що призводить до цього. До властивостей JavaScript, які починаються з цифри, не можна звертатися через крапку; необхідно звертатися через квадратні дужки. Наприклад, якщо ви маєте об'єкт з властивістю під назвою '3d', до неї можна звертатися тільки через квадратні дужки. Приклад:

+ +
var years = [1950, 1960, 1970, 1980, 1990, 2000, 2010];
+console.log(years.0);   // є синтаксична помилка
+console.log(years[0]);  // працює вірно
+
+ +
renderer.3d.setTexture(model, 'character.png');     // є синтаксична помилка
+renderer['3d'].setTexture(model, 'character.png');  // працює вірно
+
+ +

Зверніть увагу, що '3d' має писатися в лапках. Індекси масивів JavaScript також можна писати в лапках (напр., years['2'] замість years[2]), хоча це не обов'язково. Індекс 2 у years[2] примусово перетворюється на рядок рушієм JavaScript через неявне перетворення toString. Саме через це '2' та '02' займали б два різні слоти в об'єкті years і наступний приклад дорівнював би true:

+ +
console.log(years['2'] != years['02']);
+
+ +

Схожим чином до властивостей об'єкта, які є зарезервованими словами (!) можна звертатися тільки через рядкові значення у квадратних дужках (але до них можна звертатися через крапку у firefox 40.0a2 наприклад):

+ +
var promise = {
+  'var'  : 'text',
+  'array': [1, 2, 3, 4]
+};
+
+console.log(promise['array']);
+
+ +

Зв'язок між length та числовими властивостями

+ +

У масивах JavaScript властивість {{jsxref("Array.length", "length")}} та числові властивості взаємопов'язані. Декілька з вбудованих методів масивів (напр., {{jsxref("Array.join", "join")}}, {{jsxref("Array.slice", "slice")}}, {{jsxref("Array.indexOf", "indexOf")}}, і т.д.) враховують значення властивості {{jsxref("Array.length", "length")}} під час виконання. Інші методи (напр., {{jsxref("Array.push", "push")}}, {{jsxref("Array.splice", "splice")}}, і т.д.) призводять до зміни властивості масиву {{jsxref("Array.length", "length")}}.

+ +
var fruits = [];
+fruits.push('банан', 'яблуко', 'персик');
+
+console.log(fruits.length); // 3
+
+ +

Присвоєння властивості до масиву JavaScript змінить властивість масиву {{jsxref("Array.length", "length")}} відповідним чином, якщо властивість є коректним індексом масиву, і цей індекс знаходиться поза поточними межами масиву:

+ +
fruits[5] = 'манго';
+console.log(fruits[5]); // 'манго'
+console.log(Object.keys(fruits));  // ['0', '1', '2', '5']
+console.log(fruits.length); // 6
+
+ +

Збільшення значення {{jsxref("Array.length", "length")}}.

+ +
fruits.length = 10;
+console.log(Object.keys(fruits)); // ['0', '1', '2', '5']
+console.log(fruits.length); // 10
+
+ +

Однак, зменшення значення властивості {{jsxref("Array.length", "length")}} видаляє елементи.

+ +
fruits.length = 2;
+console.log(Object.keys(fruits)); // ['0', '1']
+console.log(fruits.length); // 2
+
+ +

Це пояснюється далі на сторінці {{jsxref("Array.length")}}.

+ +

Створення масиву з використанням результату пошуку збігів

+ +

Пошук збігів між регулярним виразом та рядком може створити масив JavaScript. Цей масив має властивості та елементи, які надають інформацію про збіг. Такий масив повертається методами {{jsxref("RegExp.exec")}}, {{jsxref("String.match")}} та {{jsxref("String.replace")}}. Щоб краще пояснити ці властивості та елементи, подивіться на наступний приклад, а тоді зверніться до таблиці нижче:

+ +
// Пошук послідовності з однієї d, далі одна або більше b, далі одна d
+// Запам'ятати всі b і d, яка йде за ними
+// Ігнорувати регістр
+
+var myRe = /d(b+)(d)/i;
+var myArray = myRe.exec('cdbBdbsbz');
+
+ +

Властивості та елементи, які повертаються в результаті даного пошуку збігів:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Властивість/ЕлементОписПриклад
inputВластивість тільки для читання, відображає початковий рядок, в якому виконується пошук збігів з регулярним виразом.cdbBdbsbz
indexВластивість тільки для читання, індекс збігу у рядку, нумерується з нуля.1
[0]Елемент тільки для читання, який містить символи останнього збігу.dbBd
[1], ...[n]Елементи тільки для читання, які містять підрядки збігу, що заключені у дужки, якщо такі є у регулярному виразі. Кількість можливих підрядків у дужках є необмеженою.[1]: bB
+ [2]: d
+ +

Властивості

+ +
+
Array.length
+
Властивість length конструктора Array, дорівнює 1.
+
{{jsxref("Array.prototype")}}
+
Дозволяє додавати властивості до усіх масивів.
+
+ +

Методи

+ +
+
{{jsxref("Array.from()")}}
+
Створює новий екземпляр Array з подібного до масиву або ітерабельного об'єкта.
+
{{jsxref("Array.isArray()")}}
+
Повертає true, якщо змінна є масивом, якщо ні, то повертає false.
+
{{jsxref("Array.of()")}}
+
Створює новий екземпляр Array з кількістю аргументів, заданих через змінну, незважаючи на кількість або тип аргументів.
+
+ +

Екземпляри Array

+ +

Всі екземпляри Array наслідуються від {{jsxref("Array.prototype")}}. Прототип конструктора Array може бути змінений, що вплине на всі екземпляри Array.

+ +

Властивості

+ +
{{page('uk/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Властивості')}}
+ +

Методи

+ +

Методи модифікації

+ +
{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Методи_модифікації')}}
+ +

Методи доступу

+ +
{{page('/uk/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Методи_доступу')}}
+ +

Методи перебору

+ +
{{page('uk/docs/Web/JavaScript/Reference/Global_Objects/Array/prototype', 'Методи_перебору')}}
+ +

Загальні методи масивів

+ +
+

Загальні методи масивів є нестандартними, застарілими і будуть прибрані найближчим часом.

+
+ +

Іноді ви б хотіли застосувати методи масивів на рядках або інших подібних до масиву об'єктах (таких як {{jsxref("Functions/arguments", "arguments", "", 1)}} у функції). В такому випадку, ви розглядаєте рядок як масив символів (чи не об'єкт масиву як масив). Наприклад, для того, щоб перевірити, що кожний символ у змінній str є літерою, ви б написали:

+ +
function isLetter(character) {
+  return character >= 'a' && character <= 'z';
+}
+
+if (Array.prototype.every.call(str, isLetter)) {
+  console.log("Рядок '" + str + "' містить тільки літери!");
+}
+
+ +

Такий запис є доволі марнотратним, і у JavaScript 1.6 було запроваджено загальне скорочення:

+ +
if (Array.every(str, isLetter)) {
+  console.log("Рядок '" + str + "' містить тільки літери!");
+}
+ +

{{jsxref("Global_Objects/String", "Загальні методи", "#String_generic_methods", 1)}} також доступні у {{jsxref("String", "рядках")}}.

+ +

Вони не є частиною стандартів ECMAScript і не підтримуються не Gecko оглядачами. У якості стандартної альтернативи, ви можете перетворити ваш об'єкт на справжній масив з допомогою методу {{jsxref("Array.from()")}}; хоча цей метод може не підтримуватися у старих оглядачах:

+ +
if (Array.from(str).every(isLetter)) {
+  console.log("Рядок '" + str + "' містить тільки літери!");
+}
+ +

Приклади

+ +

Створення масиву

+ +

Наступний приклад створює масив msgArray довжиною 0, потім додає значення елементам msgArray[0] та msgArray[99], змінюючи довжину масиву на 100.

+ +
var msgArray = [];
+msgArray[0] = 'Привіт';
+msgArray[99] = 'світ';
+
+if (msgArray.length === 100) {
+  console.log('Довжина масиву 100.');
+}
+
+ +

Створення двовимірного масиву

+ +

Наступний код створює шахівницю у вигляді двовимірного масиву рядків. Перший хід робиться копіюванням 'п' з (6,4) до (4,4). Стара позиція (6,4) робиться порожньою.

+ +
var board = [
+  ['Т','Н','С','Ф','К','С','Н','Т'],
+  ['П','П','П','П','П','П','П','П'],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  [' ',' ',' ',' ',' ',' ',' ',' '],
+  ['п','п','п','п','п','п','п','П'],
+  ['т','н','с','ф','к','с','н','т'] ];
+
+console.log(board.join('\n') + '\n\n');
+
+// Перемістити королівського пішака вперед на 2
+board[4][4] = board[6][4];
+board[6][4] = ' ';
+console.log(board.join('\n'));
+
+ +

Ось результат:

+ +
Т,Н,С,Ф,К,С,Н,Т
+П,П,П,П,П,П,П,П
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+ , , , , , , ,
+п,п,п,п,п,п,п,п
+т,н,с,ф,к,с,н,т
+
+Т,Н,С,Ф,К,С,Н,Т
+П,П,П,П,П,П,П,П
+ , , , , , , ,
+ , , , , , , ,
+ , , , ,п, , ,
+ , , , , , , ,
+п,п,п,п, ,п,п,п
+т,н,с,ф,к,с,н,т
+
+ +

Специфікації

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
СпецифікаціяСтатусКоментар
{{SpecName('ES1')}}{{Spec2('ES1')}}Початкове визначення.
{{SpecName('ES5.1', '#sec-15.4', 'Array')}}{{Spec2('ES5.1')}}Додано нові методи: {{jsxref("Array.isArray")}}, {{jsxref("Array.prototype.indexOf", "indexOf")}}, {{jsxref("Array.prototype.lastIndexOf", "lastIndexOf")}}, {{jsxref("Array.prototype.every", "every")}}, {{jsxref("Array.prototype.some", "some")}}, {{jsxref("Array.prototype.forEach", "forEach")}}, {{jsxref("Array.prototype.map", "map")}}, {{jsxref("Array.prototype.filter", "filter")}}, {{jsxref("Array.prototype.reduce", "reduce")}}, {{jsxref("Array.prototype.reduceRight", "reduceRight")}}
{{SpecName('ES6', '#sec-array-objects', 'Array')}}{{Spec2('ES6')}}Додано нові методи: {{jsxref("Array.from")}}, {{jsxref("Array.of")}}, {{jsxref("Array.prototype.find", "find")}}, {{jsxref("Array.prototype.findIndex", "findIndex")}}, {{jsxref("Array.prototype.fill", "fill")}}, {{jsxref("Array.prototype.copyWithin", "copyWithin")}}
{{SpecName('ESDraft', '#sec-array-objects', 'Array')}}{{Spec2('ESDraft')}}Додано новий метод: {{jsxref("Array.prototype.includes()")}}
+ +

Сумісність з веб-оглядачами

+ + + +

{{Compat("javascript.builtins.Array")}}

+ +
+ +

Див. також

+ + -- cgit v1.2.3-54-g00ecf