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
}
CLOSETAG