Skip to content

Commit

Permalink
update(JS): web/javascript/reference/global_objects/array/sort/index.md
Browse files Browse the repository at this point in the history
  • Loading branch information
viperehonchuk authored and AdriandeCita committed Feb 18, 2022
1 parent adf3a2c commit 67bf63d
Showing 1 changed file with 17 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ browser-compat: javascript.builtins.Array.sort

{{JSRef}}

Метод **`sort()`** сортує елементи масиву _[на місці](https://en.wikipedia.org/wiki/In-place_algorithm)_ й повертає відсортований масив. Усталений порядок сортування — в порядку зростання, заснований на перетворенні елементів у рядки, а потім порівнянні їхніх послідовностей зі значень кодів UTF-16.
Метод **`sort()`** (сортувати) сортує елементи масиву _[на місці](https://en.wikipedia.org/wiki/In-place_algorithm)_ й повертає відсортований масив. Усталений порядок сортування — в порядку зростання, заснований на перетворенні елементів на рядки, а потім порівнянні їхніх послідовностей значень кодових одиниць UTF-16.

Складність алгоритму сортування щодо використання часу та місця в пам'яті ніяк не гарантується і залежить від реалізації.

Expand Down Expand Up @@ -42,24 +42,24 @@ sort(function compareFn(firstEl, secondEl) {

### Параметри

- `compareFn` {{optional_inline}}
- `compareFn` (функція порівняння) {{optional_inline}}

- : Задає функцію, яка визначатиме порядок сортування. В разі, якщо вона опущена, елементи масиву перетворюються в рядки, і потім сортуються відносно значення юнікодного коду кожного символу.
- : Задає функцію, яка визначатиме порядок сортування. Якщо вона опущена, то елементи масиву перетворюються на рядки, а потім сортуються відносно значення юнікодного коду кожного символу.

- `firstEl`
- `firstEl` (перший елемент)
- : Перший елемент для порівняння.
- `secondEl`
- `secondEl` (другий елемент)
- : Другий елемент для порівняння.

### Повернене значення

Відсортований масив. Зауважте, що масив сортується _[на місці](https://en.wikipedia.org/wiki/In-place_algorithm)_: ніяких додаткових копій не створюється.
Відсортований масив. Зауважте, що масив сортується _[на місці (англ.)](https://en.wikipedia.org/wiki/In-place_algorithm)_: ніяких додаткових копій не створюється.

## Опис

Якщо `compareFunction` передано не було, всі елементи масиву, котрі не є `undefined`, сортуються шляхом перетворення їх на рядки та порівняння цих рядків в порядку кодів UTF-16. Наприклад, "банан" йде перед "черешнею". У разі сортування чисел – 9 йде перед 80, але через те, що числа перетворюються на рядки перед сортуванням, "80" йде перед "9" згідно з послідовністю кодів Unicode. Всі елементи, які є `undefined`, складаються в кінець масиву.

> **Зауваження:** В UTF-16 символи юнікоду вище `\uFFFF` кодуються як сурогатні пари кодів з проміжку `\uD800`-`\uDFFF`. Під час порівняння значення кожного коду такої пари враховується окремо. Таким чином, символ, сформований сурогатною парою `\uD855\uDE51`, під час сортування опиниться перед символом `\uFF3A`.
> **Примітка:** В UTF-16 символи юнікоду вище `\uFFFF` кодуються як сурогатні пари кодів з проміжку `\uD800`-`\uDFFF`. Під час порівняння значення кожного коду такої пари враховується окремо. Таким чином, символ, сформований сурогатною парою `\uD855\uDE51`, під час сортування опиниться перед символом `\uFF3A`.
Якщо було передано функцію порівняння `compareFunction`, всі елементи масиву, котрі не є `undefined`, сортуються відповідно поверненого значення функції порівняння (всі елементи, які містять `undefined`, складаються в кінець масиву без викликання `compareFunction`).

Expand All @@ -69,7 +69,7 @@ sort(function compareFn(firstEl, secondEl) {
| < 0 | сортує `a` перед `b` |
| === 0 | зберігає початковий порядок `a` і `b` |

> **Зауваження:** функція `compareFunction(a, b)` повинна завжди повертати те саме значення, коли до неї передають одні й ті самі елементи аргументами `a` та `b`.
> **Примітка:** функція `compareFunction(a, b)` повинна завжди повертати те саме значення, коли до неї передають одні й ті самі елементи аргументами `a` та `b`.
Отже, функція порівняння має наступну форму:

Expand Down Expand Up @@ -106,7 +106,7 @@ console.log(numbers);
// [1, 2, 3, 4, 5]
```

ES2015 дозволяє користуватись {{jsxref("Functions/Arrow_functions", "виразами стрілкової функції", "", 1)}} зі ще коротшим синтаксисом.
ES2015 дає змогу користуватись {{jsxref("Functions/Arrow_functions", "виразами стрілкової функції", "", 1)}} зі ще коротшим синтаксисом.

```js
let numbers = [4, 2, 5, 1, 3];
Expand Down Expand Up @@ -183,7 +183,7 @@ mixedNumericArray.sort(compareNumbers); // [1, 5, '9', 40, '80', 200, '700']

### Сортування не-ASCII символів

Для сортування рядків з не-ASCII символами, наприклад рядків з діакритичними знаками (e, é, è, a, ä, та ін.), чи рядків з інших мов, не англійської, використовуйте {{jsxref("String.localeCompare")}}. Ця функція дозволяє порівнювати саме такі символи, так що вони опиняться у вірній послідовності.
Для сортування рядків з не-ASCII символами, наприклад, рядків з діакритичними знаками (e, é, è, a, ä, та ін.) чи рядків з інших мов, не англійської, використовуйте {{jsxref("String.localeCompare")}}. Ця функція дає змогу порівнювати саме такі символи, так що вони опиняться у вірній послідовності.

```js
var items = ['réservé', 'premier', 'communiqué', 'café', 'adieu', 'éclair'];
Expand All @@ -202,7 +202,7 @@ items.sort(function (a, b) {
// масив, який треба відсортувати
const data = ['Григорій', 'Анна', 'Василь', 'Богдан'];

// тимчасовий масив містить об'єкти з позицією елемента в оригінальному масиві, і значенням для сортування
// тимчасовий масив містить об'єкти з позицією елемента в оригінальному масиві і значенням для сортування
const mapped = data.map((v, i) => {
return { i, value: someSlowOperation(v) };
});
Expand All @@ -225,7 +225,7 @@ const result = mapped.map((v) => data[v.i]);

### Стабільність сортування

Починаючи з версії 10 (або EcmaScript 2019), [специфікація](https://tc39.es/ecma262/#sec-array.prototype.sort) постулює, що `Array.prototype.sort` дає стабільне сортування.
Починаючи з версії 10 (або EcmaScript 2019), [специфікація (англ.)](https://tc39.es/ecma262/#sec-array.prototype.sort) постулює, що `Array.prototype.sort` дає стабільне сортування.

Для прикладу, скажімо, є список студентів з їхніми оцінками. Зауважте, що цей список вже відсортований за іменами в алфавітному порядку:

Expand All @@ -238,7 +238,7 @@ const students = [
];
```

Після сортування цього масиву за полем `grade` у порядку зростання, маємо:
Після сортування цього масиву за полем `grade` у порядку зростання маємо:

```js
students.sort((firstItem, secondItem) => firstItem.grade - secondItem.grade);
Expand Down Expand Up @@ -278,9 +278,9 @@ students.sort((firstItem, secondItem) => firstItem.grade - secondItem.grade);

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

- Поліфіл для `Array.prototype.sort` з сучасною поведінкою (включно зі стабільним сортуванням) наявний в [`core-js`](https://github.com/zloirock/core-js#ecmascript-array)
- [Поліфіл для `Array.prototype.sort` з сучасною поведінкою (включно зі стабільним сортуванням) у `core-js`](https://github.com/zloirock/core-js#ecmascript-array)
- {{jsxref("Array.prototype.reverse()")}}
- {{jsxref("String.prototype.localeCompare()")}}
- [Про стабільність алгоритму, застосованого в рушії V8](https://v8.dev/blog/array-sort)
- [Стабільність сортування V8](https://v8.dev/features/stable-sort)
- [Демонстрація стабільності сортування від Mathias Bynens](https://mathiasbynens.be/demo/sort-stability)
- [Про стабільність алгоритму, застосованого в рушії V8 (англ.)](https://v8.dev/blog/array-sort)
- [Стабільність сортування V8 (англ.)](https://v8.dev/features/stable-sort)
- [Демонстрація стабільності сортування від Матіаса Байненса (англ.)](https://mathiasbynens.be/demo/sort-stability)

0 comments on commit 67bf63d

Please sign in to comment.