aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/string/localecompare/index.html
blob: 9fe8fac1650b524d55a5e75cb94387b5593e2dc8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
---
title: String.prototype.localeCompare()
slug: Web/JavaScript/Reference/Global_Objects/String/localeCompare
tags:
  - JavaScript
  - Method
  - Prototype
  - String
  - Довідка
  - Уміжнароднення
  - метод
translation_of: Web/JavaScript/Reference/Global_Objects/String/localeCompare
---
<div>{{JSRef}}</div>

<p>Метод <strong><code>localeCompare()</code></strong> повертає число, яке вказує, як має розташуватись рядок відносно вказаного (того, що передано як параметр) у відсортованій за зростанням послідовності: перед, після, чи вони однакові.</p>

<p>{{EmbedInteractiveExample("pages/js/string-localecompare.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>Нові арґументи <code>locales</code> та <code>options</code> дають можливість вказати мову, абетковий порядок сортування якої має бути застосовано, та налаштувати механізм порівняння рядків. Раніше, коли цих арґументів ще не було, механізм порівняння рядків та порядок їх сортування цілковито залежав від реалізації.</p>

<h2 id="Синтаксис">Синтаксис</h2>

<pre class="syntaxbox"><code><var>referenceStr</var>.localeCompare(<var>compareString</var>[, <var>locales</var>[, <var>options</var>]])</code></pre>

<h3 id="Параметри">Параметри</h3>

<p>Перевіряйте в <a href="#Підтримка_веб-переглядачами">таблиці сумісності</a> наявність підтримки арґументів <code>locales</code> та <code>options</code>, а також подивіться на <a href="#Перевірка_наявності_підтримки_додаткових_арґументів">код для перевірки</a> наявності такої підтримки.</p>

<dl>
 <dt><code>compareString</code></dt>
 <dd>Рядок, з яким буде здійснено порівняння.</dd>
</dl>

<div>
<p>Аргументи <code>locales</code> та <code>options</code> налаштовують поведінку функції та дозволяють застосункам визначати мову, конвенції якої щодо форматування мають використовуватись. У тих реалізаціях, які ігнорують аргументи <code>locales</code> та <code>options</code>, локаль, що використовується, та форма поверненого рядка повністю залежать від реалізації.</p>

<p>Деталі цих параметрів та як їх використовувати дивіться у статті <a href="/uk/docs/Web/JavaScript/Reference/Global_Objects/Collator/Collator">Конструктор <code>Intl.Collator()</code></a>.</p>
</div>

<h3 id="Вертає">Вертає</h3>

<ul>
 <li><strong>Від'ємне</strong> число, якщо рядок має розташуватись <em>перед</em> <strong><code>compareString</code></strong>;</li>
 <li><strong>Додатне</strong> число, якщо рядок має розташуватись <em>після</em> <strong><code>compareString</code></strong>;</li>
 <li><strong>Нуль</strong>, якщо рядки <em>тотожні</em>.</li>
</ul>

<h2 id="Опис">Опис</h2>

<p>Вертає ціле число, що вказує, чи рядок <strong>referenceStr</strong> розташований перед <strong>compareStr</strong>, після <strong>compareStr</strong>, чи є еквівалентним <strong>compareStr</strong>.</p>

<ul>
 <li>Від'ємне, коли <strong>referenceStr</strong> розташований перед <strong>compareStr</strong></li>
 <li>Додатне, коли <strong>referenceStr</strong> розташований після <strong>compareStr</strong></li>
 <li>Вертає 0, якщо вони еквівалентні</li>
</ul>

<p><strong>НЕ ПОКЛАДАЙТЕСЬ на точні повернені значення -1 чи 1. </strong>Від'ємні та додатні цілочисельні результати різняться між переглядачами (а також між версіями переглядачів), тому що специфікація W3C вимагає лише від'ємних та додатних значень. Деякі переглядачі можуть повернути -2 чи 2, чи навіть деякі інші від'ємні та додатні значення.</p>

<h2 id="Приклади">Приклади</h2>

<h3 id="Використання_localeCompare">Використання <code>localeCompare()</code></h3>

<pre class="brush: js">// Вертає від'ємне значення, позаяк літера «a» розташована раніше за «b»
'a'.localeCompare('c');  // -2 чи -1 (або інше від'ємне значення)

// Вертає додатне значення, позаяк за абеткою слово "check" слід розташувати після "against"
'check'.localeCompare('against');  // 2 чи 1 (або інше додатне значення)

// Вертає нуль, позаяк рядки однакові
'a'.localeCompare('a');  // 0
</pre>

<h3 id="Сортування_масиву">Сортування масиву</h3>

<p>Метод <code>localeCompare()</code> надає можливість регістронезалежного сортування масивів:</p>

<pre class="brush: js">var items = ['réservé', 'Premier', 'Cliché', 'communiqué', 'café', 'Adieu'];
items.sort((a, b) =&gt; a.localeCompare(b, 'fr', {ignorePunctuation: true})); // ['Adieu', 'café', 'Cliché', 'communiqué', 'Premier', 'réservé']</pre>

<h3 id="Перевірка_наявності_підтримки_додаткових_арґументів_веб-переглядачем">Перевірка наявності підтримки додаткових арґументів веб-переглядачем</h3>

<p>Арґументи <code>locales</code> та <code>options</code> досі не підтримуються всіма переглядачами. Тож, з метою з'ясування наявності підтримки можна скористатися тим, що метод викидає (лише за наявності такої підтримки згаданих арґументів) виняток {{jsxref("Global_Objects/RangeError", "RangeError")}}, якщо параметр <code>locales</code> не вказує належного мовного коду. Наприклад, вкажемо напевне відсутній код "i":</p>

<pre class="brush: js">function checkLocaleCompareSupportsLocales() {
  try {
    'foo'.localeCompare('bar', 'i');
  } catch (e) {
    return e.name === 'RangeError';
  }
  return false;
}
</pre>

<h3 id="Використання_locales">Використання <code>locales</code></h3>

<p>Порівняння рядків за допомогою <code>localeCompare()</code> узалежнено від мови. Для застосування належного для вживаної мови (наприклад, для мови користувацького інтерфейсу вашого застосунку) порядку сортування, не забудьте вказати відповідний мовний код (або й запасні мовні коди) через параметр <code>locales</code>:</p>

<pre class="brush: js">// виводить від'ємне значення (у німецькій абетці літера «ä» розташована раніше «z»)
console.log('ä'.localeCompare('z', 'de'));

// виводить додатне значення (у шведській абетці літера «ä» розташована пізніше «z»)
console.log('ä'.localeCompare('z', 'sv'));
</pre>

<h3 id="Використання_options">Використання <code>options</code></h3>

<p>Арґумент <code>options</code> надає можливість додаткового налаштування способу порівняння рядків методом <code>localeCompare()</code>:</p>

<pre class="brush: js">// У німецькій мові літера «ä» є похідною від базової літери «a»
// виводить 0
console.log('ä'.localeCompare('a', 'de', {sensitivity: 'base'}));

// У шведській мові «ä» та «a» є окремими базовими літерами
// виводить додатне значення
console.log('ä'.localeCompare('a', 'sv', {sensitivity: 'base'}));
</pre>

<h3 id="Сортування_чисел">Сортування чисел</h3>

<pre class="brush: js">// за замовчуванням, "2" &gt; "10"
console.log("2".localeCompare("10")); // 1

// сортування за допомогою options:
console.log("2".localeCompare("10", undefined, {numeric: true})); // -1

// сортування за допомогою тега locales:
console.log("2".localeCompare("10", "en-u-kn-true")); // -1</pre>

<h2 id="Швидкодія">Швидкодія</h2>

<p>З огляду на швидкодію, для порівняння величезної кількості рядків (наприклад, під час сортування великих масивів) ліпше створювати об'єкт <code>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</code> та використовувати функцію, надану його властивістю <code>{{jsxref("Collator.prototype.compare", "compare")}}</code>:</p>

<pre class="brush: js">function sortLargeStringArray(array, locale) {
  var collator = new Intl.Collator(locale);
  array.sort(collator.compare);
}

// sortLargeStringArray([ … ], 'uk');
</pre>

<h2 id="Специфікації">Специфікації</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="col">Специфікація</th>
  </tr>
  <tr>
   <td>{{SpecName('ESDraft', '#sec-string.prototype.localecompare', 'String.prototype.localeCompare')}}</td>
  </tr>
  <tr>
   <td>{{SpecName('ES Int Draft', '#sec-String.prototype.localeCompare', 'String.prototype.localeCompare')}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Підтримка_веб-переглядачами">Підтримка веб-переглядачами</h2>

<p class="hidden">Таблиця сумісності на цій сторінці створена зі структурованих даних. Якщо ви хочете долучитися до розробки цих даних, пропонуйте нам свої pull request до репозиторію <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</p>

<p>{{Compat("javascript.builtins.String.localeCompare")}}</p>

<h2 id="Див._також">Див. також</h2>

<ul>
 <li>{{jsxref("Global_Objects/Collator", "Intl.Collator")}}</li>
</ul>