‎‎تكرار پذيرهاي شئ جاوااسكريپتJavaScript Object Iterables -‎

Previous >    <Next  

‎‎اشياء قابل تكرار، اشيائي هستند كه ميتوان آنهارا با‎for.. in‎ حلقه زد .

‎‎از نظر فني تكرار پذيرها بايد متد‎Symbol.iterator‎ را پياده سازي كنند .

‎‎تكرار كردن روي يك رشتهIterating Over a String -‎

‎‎ميتوان با استفاده از حلقه‎ for..of‎ روي عناصر رشته دور زد .

‎‎مثال ـ دور زدن روي رشته

for (const x of "W3Schools") {
  // code block to be executed
}

--(go to editor for change code and run)

‎‎تكراركردن روي آرايهIterating Over an Array -‎

‎‎ميتوان از حلقه‎for .. of‎ براي تكرار روي عناصر يك آرايه استفاده كرد

‎‎مثال ـ تكرار روي عناصر آرايه

for (const x of [1,2,3,4,5]) {
  // code block to be executed
}

--(go to editor for change code and run)

‎‎تكر كننده هاي جاوااسكريپتJavaScript Iterators -‎

‎پروتكل تكرار كننده‎(iterator protocol )‎ نحوي توليد دنباله اي از مقادير يك شئ ‎را تعريف ميكند.

‎‎يك شئ با پياده سازي متد‎next()‎‎ تبديل بيك تكرار شونده ميگردد .

‎‎متد‎next()‎‎ بايد يك شئ را با دو ويژگي برگشت دهد :

‎‎در جدول زير شرح دو آيتم برگشتي آمده است.

‎value‎ ‎‎مقدار برگشتي بوسيله تكراركننده اگر تكرار كامل نباشد
‎done‎ ‎‎اگر عمل تكرار كننده كامل باشدtrue در غير اينصورت false برگشت ميشود .

‎‎ساخت خانگي قابل تكرارHome Made Iterable -‎

‎‎مثال ـ در اين تكراركننده هر گز پايان تكرار برگشت نمي شود . مقادير‎10,20,30,..

// Home Made Iterable
function myNumbers() {
  let n = 0;
  return {
    next: function() {
      n += 10;
      return {value:n, done:false};
    }
  };
}

// Create Iterable
const n = myNumbers();
n.next(); // Returns 10
n.next(); // Returns 20
n.next(); // Returns 30

--(go to editor for change code and run)

‎مشكلي كه در تكرار پذير خانگي است ، در جاوااسكريپت براي حلقه زدن با‎ for ..of‎ ‎پشتيباني نمي شود.

‎‎تكرار پذير جاواسكريپت شئ است كه دارايSymbol.iterator باشد .

Symbol.iterator‎‎تابعي است كه يك تابع ‎next()‎‎ ‎رابرگشت ميدهد.

‎يك تكرار پذير ميتوا ند روي كد‎for (const x of iterable) { } ‎ ‎در دور قرار بگيرد.

‎‎مثال ـ تكرار پذير جاوااسكريپت

// Create an Object
myNumbers = {};

// Make it Iterable
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) {
  // Any Code Here
}

--(go to editor for change code and run)

‎متدSymbol.iterator بطور خودكار توسط‎for .. of‎ فراخوان ميشود .اما ميتوان ‎همچنين آنرا غير خودكار يا دستي انجام داد.

‎‎مثال ـ فراخوان غير خودكارSymbol.iterator

let iterator = myNumbers[Symbol.iterator]();

while (true) {
  const result = iterator.next();
  if  (result.done) break;
  // Any Code Here
}  

--(go to editor for change code and run)


Previous >    <Next