У овом упутству ћете научити о ЈаваСцрипт итераторима и итерабилима уз помоћ примера.
ЈаваСцрипт компатибилни и итератори
ЈаваСцрипт пружа протокол за итирање преко структура података. Овај протокол дефинише како се ове структуре података понављају помоћу for… of
петље.
Концепт протокола може се подијелити на:
- итерабле
- итератор
Поновљиви протокол помиње да итерабил треба да има Symbol.iterator
кључ.
ЈаваСцрипт компатибилни
Структуре података које имају Symbol.iterator()
методу називају се итерабилима. На пример, низови, низови, скупови итд.
ЈаваСцрипт итератори
Итератор је објекат који се враћа Symbol.iterator()
методом.
Итерацијски протокол пружа next()
метод за приступ сваком елементу итерабилне (структуре података) један по један.
Погледајмо пример посједовања итераблеа Symbol.Iterator()
const arr = (1, 2 ,3); // calling the Symbol.iterator() method const arrIterator = arr(Symbol.iterator)(); // gives Array Iterator console.log(arrIterator); const str = 'hello'; // calling the Symbol.iterator() method const strIterator = str(Symbol.iterator)(); // gives String Iterator console.log(strIterator);
Оутпут
Арраи Итератор () СтрингИтератор ()
Овде позивање Symbol.iterator()
методе низа и низа враћа њихове одговарајуће итераторе.
Понављајте кроз интерактивне ствари
Помоћу for… of
петље можете да прелазите кроз ове итерабилне објекте. Можете поновити Symbol.iterator()
методу на следећи начин:
const number = ( 1, 2, 3); for (let n of number(Symbol.iterator)()) ( console.log(n); )
Оутпут
1 2 3
Или можете једноставно прелистати низ овако:
const number = ( 1, 2, 3); for (let n of number) ( console.log(n); )
Овде итератор омогућава for… of
петљи да прелази низ и враћа сваку вредност.
ЈаваСцрипт нект () метода
Објекат итератора има next()
метод који враћа следећу ставку у низу.
next()
Метод садржи два својства: value
и done
.
- валуе својство може бити било ког типа података и представља тренутну вредност у низу.
value
- учињено имовина је боолеан вредност која означава да ли је понављање је потпуна или не. Ако је итерација непотпуна, својство се поставља на , иначе се поставља на .
done
done
false
true
Погледајмо пример итерабле низа:
const arr = ('h', 'e', 'l', 'l', 'o'); let arrIterator = arr(Symbol.iterator)(); console.log(arrIterator.next()); // (value: "h", done: false) console.log(arrIterator.next()); // (value: "e", done: false) console.log(arrIterator.next()); // (value: "l", done: false) console.log(arrIterator.next()); // (value: "l", done: false) console.log(arrIterator.next()); // (value: "o", done: false) console.log(arrIterator.next()); // (value: undefined, done: true)
Можете да позивате next()
више пута да бисте прешли преко arrIterator
објекта.
next()
Метод враћа објекат са два својства:value
иdone
.- Када
next()
метода достигне крај низа, тада сеdone
својство поставља наfalse
.
Погледајмо како for… of
петља извршава горњи програм. На пример,
const arr = ('h', 'e', 'l', 'l', 'o'); for (let i of arr) ( console.log(i); )
Оутпут
Здраво
for… of
Петља ради исто као и програм горе.
for… of
Петља стално зове се next()
метода на итератору. Једном када стигне done:true
, for… of
петља се прекида.
Кориснички дефинисан итератор
Такође можете креирати сопствени итератор и позвати га next()
да бисте приступили следећем елементу. На пример,
function displayElements(arr) ( // to update the iteration let n = 0; return ( // implementing the next() function next() ( if(n < arr.length) ( return ( value: arr(n++), done: false ) ) return ( value: undefined, done: true ) ) ) ) const arr = ('h', 'e', 'l', 'l', 'o'); const arrIterator = displayElements(arr); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next()); console.log(arrIterator.next());
Оутпут
(вредност: "х", готово: нетачно) (вредност: "е", готово: нетачно) (вредност: "л", готово: нетачно) (вредност: "л", готово: нетачно) (вредност: "о" , готово: нетачно) (вредност: недефинисано, готово: тачно)
У горе наведеном програму створили смо сопствени итератор. На displayElements()
функција враћа value
и done
имовине.
- Сваки пут када се
next()
метода позове, функција се извршава једном и приказује вредност низа. - Коначно, када су сви елементи низа исцрпљени,
done
својство се поставља наtrue
, саvalue
асundefined
.