جاوا اسکریپت قابل آئٹراسیون اشیاء
شیء قابل توروز میتواند توروز شود (مثل آرایهها).
شیء قابل توروز میتواند از طریق کد ساده و کارآمد دسترسی پیدا کند.
شیء قابل توروز میتواند استفاده شود for..of
دوره توروز میکند.
دوره for..of
for..of
استفاده میشود تا عناصر یک شیء قابل توروز را بگردد.
زبان
for (متغیر of iterable) { // 要执行的代码块 }
توروز
توروز آسان است.
این فقط به معنای توروز یک سری عناصر است.
اینها چند مثال ساده هستند:
- 字符串 توروز کریو:
- آرایه توروز کریو:
字符串 توروز کریو:
可以使用 for..of
字符串 کی عناصر توروز کیوئی:
ਇੰਸਟੈਂਸ
const name = "W3Schools"; for (const x of name) { // 要执行的代码块 }
آرایه توروز کریو:
可以使用 for..of
آرایه کی عناصر توروز کیوئی:
مثال 1
const letters = ["a","b","c"]; for (const x of letters) { // 要执行的代码块 }
مثال 2
const numbers = [2,4,6,8]; for (const x of numbers) { // 要执行的代码块 }
Set توروز کریو:
可以使用 for..of
Set کی عناصر توروز کیوئی:
ਇੰਸਟੈਂਸ
const letters = new Set(["a","b","c"]); for (const x of letters) { // 要执行的代码块 }
注释:我们将在后续章节中详细介绍 Set 和 Map。
遍历 Map
可以使用 for..of
循环遍历 Map 的元素:
ਇੰਸਟੈਂਸ
const fruits = new Map([ ["apples", 500], ["bananas", 300], ["oranges", 200] ]); for (const x of fruits) { // 要执行的代码块 }
JavaScript 迭代器
迭代器协议定义了如何从对象中生成一系列值。
当对象实现了 next()
方法时,它就成为迭代器。
next()
方法必须返回一包含两个属性的对象:
- ਮੁੱਲ (ਅਗਲਾ ਮੁੱਲ)
- ਮੁਕੰਮਲ (ਹਾਂ ਜਾਂ ਨਹੀਂ)
ਮੁੱਲ |
ਮੁੱਲ ਵਾਪਸ ਦਿੰਦੀ ਹੈ ਜੇਕਰ ਮੁਕੰਮਲ ਮੁੱਲ ਹੈ ਤਾਂ ਮੁੱਲ ਨਹੀਂ ਹੋਵੇਗਾ |
ਮੁਕੰਮਲ |
ਜੇਕਰ ਮੁੱਲ ਮੁਕੰਮਲ ਹੈ ਤਾਂ ਮੁੱਲ ਹੈ ਜੇਕਰ ਮੁੱਲ ਨਿਰਮਾਣ ਕਰਨ ਵਾਲੀ ਰਚਨਾ ਹੈ ਤਾਂ ਮੁੱਲ ਨਹੀਂ ਹੈ |
ਨੋਟ:
ਤਕਨੀਕੀ ਰੂਪ ਵਿੱਚ ਕੋਈ ਰਚਨਾ ਨੂੰ Symbol.iterator ਮੰਥਨ ਕਰਨ ਵਾਲੇ ਮੱਥਾਦਾਨ ਫੰਕਸ਼ਨ ਲਾਜ਼ਮੀ ਹੈ
ਕੋਈ ਰਚਨਾ ਬਣਾਉਣਾ
ਨੋਟ:
ਅਕਸਰ ਪਰਿਭਾਸ਼ਿਤ ਕੋਈ ਰਚਨਾ ਹਨ ਜੋ ਸਮਰਥਨ ਕਰਦੀਆਂ ਹਨ ਕਿ ਕੋਈ ਰਚਨਾ ਫੋਰ..ਆਫ ਸਟੈਂਸ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ ਕਿਉਂਕਿ ਉਨ੍ਹਾਂ ਦੇ ਪ੍ਰੋਟੋਟਾਈਪ ਦਾ ਉੱਦਮ ਹੈ Symbol.iterator ਮੰਥਨ ਕਰਨ ਵਾਲੇ ਮੱਥਾਦਾਨ ਫੰਕਸ਼ਨ ਹੈ next()
ਕੋਈ ਰਚਨਾ ਬਣਾਉਣਾ
ਇੰਸਟੈਂਸ
ਇਸ ਵਾਰ ਇੱਕ ਕੋਈ ਰਚਨਾ ਬਣਾਉਣ ਦਾ ਉਦਾਹਰਣ ਦਿੱਤਾ ਗਿਆ ਹੈ ਜੋ ਕਿ ਕਦੇ ਨਹੀਂ ਖਤਮ ਹੁੰਦਾ ਹੈ ਅਤੇ ਹਰ ਵਾਰ ਫੋਰਨ ਵਰਤੀ ਜਾਂਦੀ ਹੈ ਹਰ ਵਾਰ ਵਾਪਸ 10, 20, 30, 40, ... ਦਿੰਦੀ ਹੈ: let n = 0; return { // ਕੋਈ ਰਚਨਾ ਬਣਾਉਣਾ n += 10; function myNumbers() { } }; } next: function() { return { value: n, done: false }; // ਕੋਈ ਰਚਨਾ ਬਣਾਉਣਾ const n = myNumbers(); n.next(); // ਵਾਪਸ 10
n.next(); // ਵਾਪਸ 20
n.next(); // ਵਾਪਸ 30 for..of
ਪ੍ਰਸ਼ਨ ਹੈ:
ਕੋਈ ਰਚਨਾ ਫੋਰ..ਆਫ ਸਟੈਂਸ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੀ ਹੈ
ਜਿਊਏਸਕ੍ਰਿਪਟ ਵਿੱਚ ਕੁਝ ਮੌਜੂਦਾ ਕੋਈ ਰਚਨਾ ਹਨ ਜੋ ਸਮਰਥਨ ਕਰਦੀਆਂ ਹਨ ਕਿ ਕੋਈ ਰਚਨਾ ਫੋਰ..ਆਫ ਸਟੈਂਸ ਵਰਤੀ ਜਾ ਸਕਦੀ ਹੈ Symbol.iterator ਦਾ ਵਸਤੂ ਹੈ。
Symbol.iterator ਇੱਕ ਵਾਪਸ ਦਿੰਦੀ ਹੈ next()
ਮੰਥਨ ਕਰਨ ਵਾਲੇ ਮੱਥਾਦਾਨ ਫੰਕਸ਼ਨ ਹੈ。
ਮੌਜੂਦਾ ਕੋਈ ਰਚਨਾ ਲਈ ਇਹ ਕੋਡ ਵਰਤ ਸਕਦੇ ਹਨ:
for (const x of iterable}) { }
ਇੰਸਟੈਂਸ
// ਇੱਕ ਆਬਜੈਕਟ ਬਣਾਓ myNumbers = {}; // ਇਸ ਨੂੰ ਇਟਰੇਬਲ ਬਣਾਓ myNumbers[Symbol.iterator] = function() { let n = 0; done = false; return { next() { n += 10; if (n == 100) { done = true; } return { value: n, done: done }; } }; }; // ਹੁਣ ਮੈਂ for..of ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹਾਂ for (const num of myNumbers) { // ਕਿਸੇ ਵੀ ਕੋਡ }
Symbol.iterator ਮੇਥਡ ਦੁਆਰਾ ਹੋਵੇਗਾ for..of
ਆਪਣੇ ਹੀ ਕਰਕੇ ਬੁਲਾਓ。
ਲੇਕਿਨ ਅਸੀਂ ਇਸ ਨੂੰ ਮੈਨੂਅਲ ਤੌਰ 'ਤੇ ਵੀ ਬੁਲਾ ਸਕਦੇ ਹਾਂ:
ਇੰਸਟੈਂਸ
let iterator = myNumbers[Symbol.iterator](); while (true) { const result = iterator.next(); if (result.done) break; // ਕਿਸੇ ਵੀ ਕੋਡ }