Skip to content

Commit

Permalink
update(JS): web/javascript/reference/global_objects/array/from (#3423)
Browse files Browse the repository at this point in the history
* update(JS): web/javascript/reference/global_objects/array/from

* Apply suggestions from code review

Co-authored-by: Alina Listunova <[email protected]>

---------

Co-authored-by: Alina Listunova <[email protected]>
  • Loading branch information
undead404 and alinkedd authored Oct 26, 2024
1 parent a4fee19 commit 9d90b0e
Showing 1 changed file with 11 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ Array.from(arrayLike, mapFn, thisArg)

`Array.from()` має необов'язковий параметр `mapFn`, котрий дає змогу виконувати функцію на кожному елементі масиву, що створюється, подібно до {{jsxref("Array/map", "map()")}}. Ясніше висловлюючись, `Array.from(obj, mapFn, thisArg)` дає такий само результат, як `Array.from(obj).map(mapFn, thisArg)`, окрім того, що не створює проміжний масив, і `mapFn` отримує лише два аргументи (`element`, `index`), без передачі всього масиву, тому що масив іще в процесі створення.

> **Примітка:** Така логіка – більш важлива для [типізованих масивів](/uk/docs/Web/JavaScript/Guide/Typed_arrays), адже проміжний масив обов'язково містив би значення, що вписувались би у відповідний тип. `Array.from()` реалізований так, щоб мати таку ж сигнатуру, як {{jsxref("TypedArray.from()")}}.
> [!NOTE]
> Така логіка – більш важлива для [типізованих масивів](/uk/docs/Web/JavaScript/Guide/Typed_arrays), адже проміжний масив обов'язково містив би значення, що вписувались би у відповідний тип. `Array.from()` реалізований так, щоб мати таку ж сигнатуру, як {{jsxref("TypedArray.from()")}}.
Метод `Array.from()` є узагальненим фабричним методом. Наприклад, якщо підклас `Array` успадковує метод `from()`, то успадкований метод `from()` повертатиме нові примірники підкласу, а не примірники `Array`. Фактично значення `this` може бути будь-якою функцією-конструктором, котра приймає єдиний аргумент, що представляє довжину нового масиву. Коли передається `arrayLike` – ітерований об'єкт, то конструктор викликається без аргументів; коли передається масивоподібний об'єкт, то конструктор викликається з [нормалізованою довжиною](/uk/docs/Web/JavaScript/Reference/Global_Objects/Array#normalizatsiia-vlastyvosti-length) масивоподібного об'єкта. Остаточне значення `length` присвоюється знову, коли ітерація завершується. Якщо значення `this` не є функцією-конструктором, то замість нього використовується конструктор `Array`.

Expand Down Expand Up @@ -131,20 +132,23 @@ Array.from({ length: 5 }, (v, i) => i);
### Генератор послідовності (діапазон)

```js
// Функція – генератор послідовності (загальноприйнято зветься "діапазоном" – "range", наприклад, у Clojure, PHP тощо)
// Функція – генератор послідовності (загальноприйнято зветься "діапазоном" – "range", пор. Python, Clojure тощо)
const range = (start, stop, step) =>
Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + i * step);
Array.from(
{ length: Math.ceil((stop - start) / step) },
(_, i) => start + i * step,
);

// Згенерувати діапазон чисел 0..4
// Згенерувати послідовність чисел від 0 (включно) до 5 (не включно) з інкрементом на 1
range(0, 4, 1);
// [0, 1, 2, 3, 4]

// Згенерувати діапазон чисел 1..10 з кроком 2
// Згенерувати послідовність чисел від 1 (включно) до 10 (не включно) з інкрементом на 2
range(1, 10, 2);
// [1, 3, 5, 7, 9]

// Згенерувати за допомогою Array.from алфавіт, користуючись тим, що він має послідовний порядок
range("A".charCodeAt(0), "Z".charCodeAt(0), 1).map((x) =>
// Згенерувати латинський алфавіт, користуючись тим, що він має послідовний порядок
range("A".charCodeAt(0), "Z".charCodeAt(0) + 1, 1).map((x) =>
String.fromCharCode(x),
);
// ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
Expand Down

0 comments on commit 9d90b0e

Please sign in to comment.