ÐÑеÑаÑÐ¸Ð²Ð½Ñ Ð¾Ð±âÑкÑи Ñ ÑзагалÑненнÑм маÑивÑв. Це конÑепÑÑÑ, Ñка дозволÑÑ Ð½Ð°Ð¼ зÑобиÑи бÑдÑ-Ñкий обâÑÐºÑ Ð¿ÑидаÑним Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ Ð² ÑÐ¸ÐºÐ»Ñ for..of.
ÐвиÑайно, по маÑÐ¸Ð²Ð°Ñ Ð¼Ð¾Ð¶Ð½Ð° ÑÑеÑÑваÑиÑÑ. Ðле Ñ Ð±Ð°Ð³Ð°Ñо ÑнÑÐ¸Ñ Ð²Ð±ÑÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±âÑкÑÑв, ÑÐºÑ Ñакож можна ÑÑеÑÑваÑи. ÐапÑиклад, ÑÑдки Ñакож можна ÑÑеÑÑваÑи.
ЯкÑо обâÑÐºÑ ÑеÑ
нÑÑно не Ñ Ð¼Ð°Ñивом, а пÑедÑÑавлÑÑ ÐºÐ¾Ð»ÐµÐºÑÑÑ (list, set) ÑогоÑÑ, Ñо for..of â ÑÑдовий ÑинÑакÑÐ¸Ñ Ð´Ð»Ñ Ð¹Ð¾Ð³Ð¾ обÑ
одÑ, ÑÐ¾Ð¼Ñ Ð¿Ð¾Ð´Ð¸Ð²ÑмоÑÑ, Ñк змÑÑиÑи його пÑаÑÑваÑи.
Symbol.iterator
Ðи можемо легко зÑозÑмÑÑи конÑепÑÑÑ ÑÑеÑаÑÐ¸Ð²Ð½Ð¸Ñ Ð¾Ð±âÑкÑÑв, зÑобивÑи ÑÑ Ð²Ð»Ð°ÑноÑÑÑ.
ÐапÑиклад, Ñ Ð½Ð°Ñ Ñ Ð¾Ð±âÑкÑ, Ñкий не Ñ Ð¼Ð°Ñивом, але виглÑÐ´Ð°Ñ Ð¿ÑидаÑним Ð´Ð»Ñ for..of.
Як, напÑиклад, обâÑÐºÑ range, Ñкий пÑедÑÑавлÑÑ ÑнÑеÑвал ÑиÑел:
let range = {
from: 1,
to: 5
};
// Ðи Ñ
оÑемо, Ñоб for..of пÑаÑÑвав:
// for(let num of range) ... num=1,2,3,4,5
Щоб зÑобиÑи обâÑÐºÑ range ÑÑеÑабелÑним (Ñ Ñаким Ñином дозволиÑи for..of пÑаÑÑваÑи), нам поÑÑÑбно додаÑи меÑод до обâÑкÑа з Ð½Ð°Ð·Ð²Ð¾Ñ Symbol.iterator (ÑпеÑÑалÑний вбÑдований Ñимвол Ñаме Ð´Ð»Ñ ÑÑого).
- Ðоли
for..ofзапÑÑкаÑÑÑÑÑ, вÑн Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ Ñей меÑод один Ñаз (або Ð²Ð¸ÐºÐ¸Ð´Ð°Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÑ, ÑкÑо Ñей меÑод не знайдено). ÐеÑод повинен повеÑнÑÑи iterator â обâÑÐºÑ Ð· меÑодомnext. - ÐалÑ
for..ofпÑаÑÑÑ Ð»Ð¸Ñе з повеÑненим обâÑкÑом. - Ðоли
for..ofÑ Ð¾Ñе оÑÑимаÑи наÑÑÑпне знаÑеннÑ, вÑн викликаÑnext()на ÑÑÐ¾Ð¼Ñ Ð¾Ð±âÑкÑÑ. - РезÑлÑÑаÑ
next()повинен маÑи виглÑд{done: Boolean, value: any}, деdone=trueознаÑаÑ, Ñо ÑÑеÑаÑÑÑ Ð·Ð°Ð²ÐµÑÑена, ÑнакÑеvalueâ Ñе наÑÑÑпне знаÑеннÑ.
ÐÑÑ Ð¿Ð¾Ð²Ð½Ð° ÑеалÑзаÑÑÑ Ð¾Ð±âÑкÑÑ range Ñз заÑваженнÑми:
let range = {
from: 1,
to: 5
};
// 1. виклик for..of ÑпоÑаÑÐºÑ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ ÑÑ ÑÑнкÑÑÑ
range[Symbol.iterator] = function() {
// 2. ÐалÑ, for..of пÑаÑÑÑ ÑÑлÑки з Ñим ÑÑеÑаÑоÑом, запиÑÑÑÑи Ñ Ð½Ñого наÑÑÑÐ¿Ð½Ñ Ð·Ð½Ð°ÑеннÑ
return {
current: this.from,
last: this.to,
next() {
// 4. вÑн повинен повеÑÑаÑи знаÑÐµÐ½Ð½Ñ Ñк обâÑÐºÑ {done:.., value :...}
if (this.current <= this.last) {
return { done: false, value: this.current++ };
} else {
return { done: true };
}
}
};
};
// ÑÐµÐ¿ÐµÑ Ñе пÑаÑÑÑ!
for (let num of range) {
alert(num); // 1, поÑÑм 2, 3, 4, 5
}
ÐÑÐ´Ñ Ð»Ð°Ñка, звеÑнÑÑÑ ÑÐ²Ð°Ð³Ñ Ð½Ð° оÑÐ½Ð¾Ð²Ð½Ñ Ð¾ÑобливÑÑÑÑ ÑÑеÑаÑÐ¸Ð²Ð½Ð¸Ñ Ð¾Ð±âÑкÑÑв: ÑоздÑÐ»ÐµÐ½Ð½Ñ Ð¿Ñоблем.
- Сам
rangeне Ð¼Ð°Ñ Ð¼ÐµÑодÑnext(). - ÐаÑомÑÑÑÑ ÑнÑий обâÑкÑ, Ñак званий âÑÑеÑаÑоÑâ, ÑÑвоÑÑÑÑÑÑÑ Ð·Ð° Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ
range[Symbol.iterator](), а йогоnext()генеÑÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð´Ð»Ñ ÑÑеÑаÑÑÑ.
ÐÑже, обâÑкÑ, Ñо ÑÑеÑÑÑ Ð²ÑдокÑемлений вÑд обâÑкÑа, Ñкий вÑн ÑÑеÑÑÑ.
ТеÑ
нÑÑно, ми можемо обâÑднаÑи ÑÑ
Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи range в ÑкоÑÑÑ ÑÑеÑаÑоÑа, Ñоб зÑобиÑи код пÑоÑÑÑÑим.
ÐодÑбно до ÑÑого:
let range = {
from: 1,
to: 5,
[Symbol.iterator]() {
this.current = this.from;
return this;
},
next() {
if (this.current <= this.to) {
return { done: false, value: this.current++ };
} else {
return { done: true };
}
}
};
for (let num of range) {
alert(num); // 1, ÑÐ¾Ð´Ñ 2, 3, 4, 5
}
Ð¢ÐµÐ¿ÐµÑ range[Symbol.iterator]() повеÑÑÐ°Ñ Ñам обâÑÐºÑ range: вÑн Ð¼Ð°Ñ Ð½ÐµÐ¾Ð±Ñ
Ñдний next() меÑод Ñ Ð¿Ð°Ð¼âÑÑÐ°Ñ Ð¿Ð¾ÑоÑÐ½Ñ ÑÑеÑаÑÑÑ Ð¿ÑогÑеÑÑ Ð² this.current. ÐоÑоÑÑе? Так. Ð ÑÐ½Ð¾Ð´Ñ Ñе Ñакож добÑе.
ÐедолÑком Ñ Ñе, Ñо ÑÐµÐ¿ÐµÑ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ маÑи два for..of Ñикли паÑалелÑно Ð´Ð»Ñ Ð¿ÑоÑ
Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ ÑеÑез обâÑкÑ: вони бÑдÑÑÑ Ð´ÑлиÑи ÑÑеÑаÑÑйний ÑÑан, ÑÐ¾Ð¼Ñ Ñо Ñ ÑÑлÑки один ÑÑеÑаÑÐ¾Ñ â Ñам обâÑкÑ. Ðле два паÑалелÑниÑ
for-of Ñе ÑÑдкÑÑний випадок, навÑÑÑ Ñ Ð°ÑинÑ
ÑонÑзованиÑ
ÑÑенаÑÑÑÑ
.
Також Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ñ Ð½ÐµÑкÑнÑÐµÐ½Ð½Ñ ÑÑеÑаÑоÑи. ÐапÑиклад, range ÑÑÐ°Ñ Ð½ÐµÑкÑнÑенним Ð´Ð»Ñ range.to = Infinity. Ðбо ми можемо зÑобиÑи ÑÑеÑований обâÑкÑ, Ñкий генеÑÑÑ Ð½ÐµÑкÑнÑÐµÐ½Ð½Ñ Ð¿Ð¾ÑлÑдовнÑÑÑÑ Ð¿ÑевдоÑандомниÑ
ÑиÑел. Це Ñакож може бÑÑи коÑиÑним.
ÐÐµÐ¼Ð°Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ñ Ð½Ð° next, вÑн може повеÑÑаÑи вÑе бÑлÑÑе Ñ Ð±ÑлÑÑе знаÑенÑ, Ñе ноÑмалÑно.
ÐвиÑайно, for..of Ñикли ÑеÑез Ñакий обâÑÐºÑ Ð±Ñде неÑкÑнÑенним. Ðле ми завжди можемо зÑпиниÑи його за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ break.
Ð Ñдок Ñ ÑÑеÑованим
ÐаÑиви Ñа ÑÑдки найбÑлÑÑ ÑиÑоко викоÑиÑÑовÑÑÑÑÑÑ Ð²Ð±ÑÐ´Ð¾Ð²Ð°Ð½Ñ ÑÑеÑаÑоÑи.
ÐÐ»Ñ ÑÑдка, for..of Ñикл пÑоÑ
одиÑÑ Ð¿Ð¾ Ñимволам:
for (let char of "test") {
// викликаÑÑÑÑÑ 4 Ñази: один Ñаз Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ ÑимволÑ
alert( char ); // t, поÑÑм e, поÑÑм s, поÑÑм t
}
Ð Ñе пÑавилÑно пÑаÑÑÑ Ð· ÑÑÑогаÑними паÑами!
let str = 'ð³ð';
for (let char of str) {
alert( char ); // ð³, Ñ Ð¿Ð¾ÑÑм ð
}
Ðиклик ÑÑеÑаÑоÑа Ñвно
ÐÐ»Ñ Ð³Ð»Ð¸Ð±Ñого ÑозÑмÑннÑ, подивÑмоÑÑ, Ñк Ñвно викоÑиÑÑовÑваÑи ÑÑеÑаÑоÑ.
Ðи бÑдемо ÑÑеÑÑваÑи ÑÑдок ÑоÑно Ñак Ñамо, Ñк Ð´Ð»Ñ for..of, але з пÑÑмими викликами. Цей код ÑÑвоÑÑÑ ÑÑеÑаÑÐ¾Ñ ÑÑдка Ñ Ð¾ÑÑимÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð²Ñд нÑого âвÑÑÑнÑâ:
let str = "ÐÑивÑÑ";
// ÑобиÑÑ Ñе ж Ñаме, Ñк
// for (let char of str) alert(char);
let iterator = str[Symbol.iterator]();
while (true) {
let result = iterator.next();
if (result.done) break;
alert(result.value); // виводиÑÑ Ñимволи один за одним
}
Це ÑÑдко поÑÑÑбно, але Ð´Ð°Ñ Ð½Ð°Ð¼ бÑлÑÑе конÑÑÐ¾Ð»Ñ Ð½Ð°Ð´ пÑоÑеÑом, нÑж for ..of. ÐапÑиклад, ми можемо ÑоздÑлиÑи пÑоÑÐµÑ ÑÑеÑаÑÑÑ: ÑÑоÑ
и ÑÑеÑÑваÑи, а поÑÑм зÑпиниÑиÑÑ, зÑобиÑи ÑоÑÑ ÑнÑе, а поÑÑм вÑдновиÑи пÑзнÑÑе.
ÐÑеÑÐ¾Ð²Ð°Ð½Ñ Ð¾Ð±âÑкÑи Ñа пÑевдомаÑиви
Ð¦Ñ Ð´Ð²Ð° оÑÑÑÑÐ¹Ð½Ð¸Ñ ÑеÑмÑни виглÑдаÑÑÑ Ð¿Ð¾Ð´Ñбними, але дÑже ÑÑзнÑ. ÐÑÐ´Ñ Ð»Ð°Ñка, пеÑеконайÑеÑÑ, Ñо ви добÑе ÑозÑмÑÑÑе ÑÑ , Ñоб ÑникнÑÑи плÑÑанини.
- ÐÑеÑÐ¾Ð²Ð°Ð½Ñ â Ñе обâÑкÑи, ÑÐºÑ ÑеалÑзÑÑÑÑ Ð¼ÐµÑод
Symbol.iterator, Ñк опиÑано виÑе. - ÐÑевдомаÑиви â Ñе обâÑкÑи, ÑÐºÑ Ð¼Ð°ÑÑÑ ÑндекÑи Ñа
length, ÑÐ¾Ð¼Ñ Ð²Ð¾Ð½Ð¸ виглÑдаÑÑÑ Ñк маÑиви.
Ðоли ми викоÑиÑÑовÑÑмо JavaScript Ð´Ð»Ñ Ð¿ÑакÑиÑниÑ
Ð·Ð°Ð²Ð´Ð°Ð½Ñ Ñ Ð±ÑаÑзеÑÑ Ð°Ð±Ð¾ бÑдÑ-ÑÐºÐ¾Ð¼Ñ ÑнÑÐ¾Ð¼Ñ ÑеÑедовиÑÑ, ми можемо зÑÑÑÑÑÑи обâÑкÑи, ÑÐºÑ Ñ ÑÑеÑованими або маÑивами, або обома.
ÐапÑиклад, ÑÑдки Ñ ÑÑеÑованими обâÑкÑами (for..of пÑаÑÑÑ Ð½Ð° ниÑ
) Ñа пÑевдомаÑивами (Ñ Ð½Ð¸Ñ
Ñ ÑиÑÐ»Ð¾Ð²Ñ ÑндекÑи Ñа length).
Ðле ÑÑеÑований обâÑÐºÑ Ð¼Ð¾Ð¶Ðµ не бÑÑи маÑивом. Рнавпаки, пÑевдомаÑив може бÑÑи не ÑÑеÑованим обâÑкÑом.
ÐапÑиклад, range Ñ Ð¿ÑÐ¸ÐºÐ»Ð°Ð´Ñ Ð²Ð¸Ñе Ñ ÑÑеÑованим обâÑкÑом, але не маÑивом, ÑÐ¾Ð¼Ñ Ñо вÑн не Ð¼Ð°Ñ ÑндекÑованиÑ
влаÑÑивоÑÑей Ñа length.
РоÑÑ Ð¾Ð±âÑкÑ, Ñкий Ñ Ð¿ÑевдомаÑивом, але не ÑÑеÑованим обâÑкÑом:
let arrayLike = { // Ð¼Ð°Ñ ÑндекÑи Ñа length => пÑевдомаÑив
0: "Hello",
1: "World",
length: 2
};
// Ðомилка (Ð½ÐµÐ¼Ð°Ñ Symbol.iterator)
for (let item of arrayLike) {}
Ðбидва, ÑÑеÑований обâÑÐºÑ Ñа пÑевдомаÑив, Ñк пÑавило Ñ Ð½Ðµ маÑивами, вони не маÑÑÑ push,pop Ñа Ñн. Це доÑиÑÑ Ð½ÐµÐ·ÑÑÑно, ÑкÑо Ñ Ð½Ð°Ñ Ñ Ñакий обâÑÐºÑ Ñ Ð¼Ð¸ Ñ
оÑемо пÑаÑÑваÑи з ним Ñк з маÑивом. ÐапÑиклад, ми Ñ
оÑÑли б пÑаÑÑваÑи з angy за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¼ÐµÑодÑв маÑивÑ. Як ÑÑого доÑÑгÑи?
Array.from
ÐÑнÑÑ ÑнÑвеÑÑалÑний меÑод Array.from, Ñкий пÑÐ¸Ð¹Ð¼Ð°Ñ ÑÑеÑований обâÑÐºÑ Ð°Ð±Ð¾ пÑевдомаÑив Ñ ÑобиÑÑ Ð· нÑого âÑпÑавжнÑйâ маÑив. Ð¢Ð¾Ð´Ñ Ð¼Ð¸ можемо викликаÑи на нÑÐ¾Ð¼Ñ Ð¼ÐµÑоди маÑивÑ.
ÐапÑиклад:
let arrayLike = {
0: "ÐÑивÑÑ",
1: "СвÑÑ",
length: 2
};
let arr = Array.from(arrayLike); // (*)
alert(arr.pop()); // СвÑÑ (меÑод пÑаÑÑÑ)
Array.from Ñ ÑÑÐ´ÐºÑ (*) беÑе обâÑкÑ, пеÑевÑÑÑÑ Ð¹Ð¾Ð³Ð¾ на ÑÑеÑабелÑнÑÑÑÑ Ð°Ð±Ð¾ Ñе, Ñо Ñе пÑевдомаÑив, поÑÑм ÑÑвоÑÑÑ Ð½Ð¾Ð²Ð¸Ð¹ маÑив Ñ ÐºÐ¾Ð¿ÑÑÑ Ð´Ð¾ нÑого вÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñи.
Те ж Ñаме вÑдбÑваÑÑÑÑÑ Ñ Ð· ÑÑеÑованим обâÑкÑом:
// пÑипÑÑÑимо, Ñо дÑапазон взÑÑий з наведеного виÑе пÑикладÑ
let arr = Array.from(range);
alert(arr); // 1,2,3,4,5 (array toString conversion works)
Ðовний ÑинÑакÑÐ¸Ñ Ð´Ð»Ñ Array.from Ñакож дозволÑÑ Ð½Ð°Ð¼ надаÑи додаÑÐºÐ¾Ð²Ñ ÑÑнкÑÑÑ âÑÑанÑÑоÑмаÑÑÑâ:
Array.from(obj[, mapFn, thisArg])
mapFn Ñ Ð½ÐµÐ¾Ð±Ð¾Ð²âÑзоковим(опÑÑоналÑним) аÑгÑменÑом-ÑÑнкÑÑÑÑ, Ñка бÑде заÑÑоÑовÑваÑиÑÑ Ð´Ð¾ кожного елеменÑа пеÑед його додаваннÑм до маÑивÑ, а thisArg â Ñакож необовâÑзковий аÑгÑменÑ, Ñкий дозволÑÑ Ð²ÑÑановиÑи this Ð´Ð»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ mapFn.
ÐапÑиклад:
// пÑипÑÑÑимо, Ñо дÑапазон взÑÑий з наведеного виÑе пÑикладÑ
// поÑаÑ
ÑÑмо квадÑÐ°Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ ÑиÑла
let arr = Array.from(range, num => num * num);
alert(arr); // 1,4,9,16,25
ТÑÑ Ð¼Ð¸ викоÑиÑÑовÑÑмо Array.from, Ñоб пеÑеÑвоÑиÑи ÑÑдок Ñ Ð¼Ð°Ñив ÑимволÑв:
let str = 'ð³ð';
// ÑозÑбâÑмо ÑÑдок на маÑив ÑимволÑв
let chars = Array.from(str);
alert(chars[0]); // ð³
alert(chars[1]); // ð
alert(chars.length); // 2
Ðа вÑдмÑÐ½Ñ Ð²Ñд str.split, вÑн ÑпиÑаÑÑÑÑÑ Ð½Ð° ÑÑеÑабелÑний Ñ
аÑакÑÐµÑ ÑÑдка Ñ ÑомÑ, Ñак Ñамо, Ñк for..of, коÑекÑно пÑаÑÑÑ Ð· ÑÑÑогаÑними паÑами.
Ð¢ÐµÑ Ð½ÑÑно ÑÑÑ Ñе вÑдбÑваÑÑÑÑÑ Ñак Ñамо, Ñк:
let str = 'ð³ð';
let chars = []; // Array.from внÑÑÑÑÑнÑо ÑобиÑÑ Ñей Ñамий Ñикл
for (let char of str) {
chars.push(char);
}
alert(chars);
⦠Ðле знаÑно коÑоÑÑе.
Ðо ÑеÑÑ, ми можемо ÑÑвоÑиÑи slice, ÑкÑй пÑдÑÑимÑÑ ÑÑÑогаÑÐ½Ñ Ð¿Ð°Ñи:
function slice(str, start, end) {
return Array.from(str).slice(start, end).join('');
}
let str = 'ð³ðð©·¶';
alert( slice(str, 1, 3) ); // ðð©·¶
// оÑÑ Ð½Ð°Ñивний меÑод Ñкий не пÑдÑÑимÑÑ ÑÑÑогаÑÐ½Ñ Ð¿Ð°Ñи
alert( str.slice(1, 3) ); // ÑмÑÑÑÑ (Ð´Ð²Ñ ÑаÑÑини ÑÑзниÑ
ÑÑÑогаÑниÑ
паÑ)
ÐÑдÑÑмки
ÐбâÑкÑи, ÑÐºÑ Ð¼Ð¾Ð¶Ð½Ð° викоÑиÑÑовÑваÑиÑÑ Ñ for..of, називаÑÑÑÑÑ ÑÑеÑованими.
- ТеÑ
нÑÑно ÑÑеÑÐ¾Ð²Ð°Ð½Ñ Ð¾Ð±âÑкÑи Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ ÑеалÑзовÑваÑи меÑод з назвоÑ
Symbol.iterator.- РезÑлÑÑаÑ
obj[Symbol.iterator]()називаÑÑÑÑÑ ÑÑеÑаÑоÑом. ÐÑн забезпеÑÑÑ Ð¿Ð¾Ð´Ð°Ð»ÑÑий пÑоÑÐµÑ ÑÑеÑаÑÑÑ. - ÐÑеÑаÑÐ¾Ñ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ маÑи меÑод з назвоÑ
next(), Ñкий повеÑÑÐ°Ñ Ð¾Ð±âÑкÑ{done: Boolean, value: any}, деdone: trueознаÑÐ°Ñ ÐºÑнеÑÑ Ð¿ÑоÑеÑÑ ÑÑеÑаÑÑÑ, ÑнакÑеvalueÑ Ð½Ð°ÑÑÑпним знаÑеннÑм.
- РезÑлÑÑаÑ
- ÐеÑод
Symbol.iteratorавÑомаÑиÑно викликаÑÑÑÑÑfor..of, але ми Ñакож можемо Ñе зÑобиÑи безпоÑеÑеднÑо. - ÐбÑÐ´Ð¾Ð²Ð°Ð½Ñ ÑÑеÑÐ¾Ð²Ð°Ð½Ñ Ð¾Ð±âÑкÑи, ÑÐ°ÐºÑ Ñк ÑÑдки або маÑиви, Ñакож ÑеалÑзÑÑÑÑ
Symbol.iterator. - Ð Ñдковий ÑÑеÑаÑÐ¾Ñ Ð·Ð½Ð°Ñ Ð¿Ñо ÑÑÑогаÑÐ½Ñ Ð¿Ð°Ñи.
ÐбâÑкÑи, ÑÐºÑ Ð¼Ð°ÑÑÑ ÑндекÑÐ¾Ð²Ð°Ð½Ñ Ð²Ð»Ð°ÑÑивоÑÑÑ Ñа length, називаÑÑÑÑÑ Ð¿ÑевдомаÑивами. Ð¢Ð°ÐºÑ Ð¾Ð±âÑкÑи Ñакож можÑÑÑ Ð¼Ð°Ñи ÑнÑÑ Ð²Ð»Ð°ÑÑивоÑÑÑ Ñа меÑоди, але не маÑÑÑ Ð²Ð±ÑдованиÑ
меÑодÑв маÑивÑв.
ЯкÑо ми заглÑнемо в ÑпеÑиÑÑкаÑÑÑ â ми побаÑимо, Ñо бÑлÑÑÑÑÑÑ Ð²Ð±ÑÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑодÑв пÑипÑÑкаÑÑÑ, Ñо вони пÑаÑÑÑÑÑ Ð· ÑÑеÑованими обâÑкÑами або пÑевдомаÑивами замÑÑÑÑ âÑеалÑÐ½Ð¸Ñ â маÑивÑв, ÑÐ¾Ð¼Ñ Ñо Ñе бÑлÑÑ Ð°Ð±ÑÑÑакÑно.
Array.from(obj[, mapFn, thisArg]) ÑÑвоÑÑÑ ÑпÑавжнÑй Array з ÑÑеÑованого обâÑкÑÑ Ð°Ð±Ð¾ пÑевдомаÑÐ¸Ð²Ñ obj, Ñ ÑÐ¾Ð´Ñ Ð¼Ð¸ можемо викоÑиÑÑовÑваÑи на нÑÐ¾Ð¼Ñ Ð¼ÐµÑоди маÑивÑ. ÐеобовâÑÐ·ÐºÐ¾Ð²Ñ Ð°ÑгÑменÑи mapFn ÑаthisArg дозволÑÑÑÑ Ð½Ð°Ð¼ заÑÑоÑовÑваÑи ÑÑнкÑÑÑ Ð´Ð¾ кожного елеменÑа.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)