جاوا اسکریپت قابل آئٹراسیون اشیاء

شیء قابل توروز می‌تواند توروز شود (مثل آرایه‌ها).

شیء قابل توروز می‌تواند از طریق کد ساده و کارآمد دسترسی پیدا کند.

شیء قابل توروز می‌تواند استفاده شود 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;
  // ਕਿਸੇ ਵੀ ਕੋਡ
}

ਸਵੈ ਦੀ ਪ੍ਰਯੋਗ ਕਰੋ