Object Iterables
في هذا الدرس سوف نتعرف علي iterables وهي الخاصة بأنشاء تكرارات علي ال Objects في لغة javaScript
التاريخ
الدروس
المستوى
اللغة
المشاهدات
المواضيع
الشروحات chevron_left Object Iterables chevron_left JavaScript
Object Iterables
</> Iterating Over a String
نستطيع تكرار ال object باستخدام الحلقة التكرارية " for..of " وهي تسمي iterable ويمكننا ايضا استخدامها في عمل حلقة تكرارية علي احرف نص معين كما في المثال التالي
for (const x of "Closetag") { /* code block to be executed*/ }
</> Iterating Over an Array
نستطيع استخدام الحلقة التكرارية "for..of" لنقوم بعمل تكرار عملية المرور علي عناصر مصفوفة array معينة كما في المثال التالي
</> JavaScript Iterators
ال iterator protocol يستخدم في تحديد الطريقة التي سوف يتم بها عرض النص الموجود بداخل object معين
ال object يصبح iterator عند تنفيذ دالة ( )next
- تقوم دالة next بأرجاع object حتي علي اثنان من الخصائص properties وهما :
- down : تكون قيمتها تساوي true عندما يتم انتهاء تنفيذ عملية التكرار علي عنصر معين و false اذا قام ال iterator باضافة قيمة جديدة
- value : هي القيمة التي تم ارجاعها بواسطة ال iterator ويمكن تجاهلها اذا كانت قيمت "done" تساوي "true "
</> Home Made Iterable
هذه العوائد المتكررة التي لا تنتهي أبدًا: 10،20،30،40 ، .... في كل مرة يتم استدعاء دالة ( )next
/* 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 */
iterable : هو عبارة عن object يحتوي علي الخاصية "Symbol.iterator "
Symbol.iterator : هي عبارة عن خاصية تقوم بتنفيذ دالة ( )next
Example
/* 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}; } }; }
الدالة "Symbol.iterator " يتم استدعائها بشكل تلقائي بواسطة "for..of" ولكننا يمكننا انشائها بشكل يدوي كالتالي
let iterator = myNumbers[Symbol.iterator](); while (true) { const result = iterator.next(); if (result.done) break; // Any Code Here }