JavaScript Iterables
الكائنات القابلة للتكرار هي كائنات يمكن تكرارها باستخدام for..of
.
من الناحية الفنية ، يجب أن تنفذ العناصر التكرارية Symbol.iterator
الطريقة.
التكرار عبر سلسلة
يمكنك استخدام for..of
حلقة لتكرار عناصر سلسلة نصية:
مثال
for (const x of "W3Schools") {
// code block to be executed
}
التكرار على مصفوفة
يمكنك استخدام for..of
حلقة لتكرار عناصر المصفوفة:
مثال
for (const x of [1,2,3,4,5] {
// code block to be executed
}
مكررات جافا سكريبت
يحدد بروتوكول المكرر كيفية إنتاج سلسلة من القيم من كائن.
يصبح الكائن مكررًا عندما يقوم بتنفيذ next()
طريقة.
يجب أن تُرجع next()
الطريقة كائنًا بخاصيتين:
- القيمة (القيمة التالية)
- تم (صح أم خطأ)
القيمة | القيمة التي أرجعها المكرر (يمكن حذفها إذا كانت القيمة صحيحة) |
---|---|
فعله |
صواب إذا كان المكرر قد أكمل خطأ إذا كان المكرر قد أنتج قيمة جديدة |
جعل المنزل قابل للتكرار
هذه العوائد المتكررة التي لا تنتهي أبدًا: 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
أصبحت مشكلة المنزل قابلة للتكرار:
لا يدعم for..of
بيان JavaScript.
JavaScript قابل للتكرار هو كائن يحتوي على 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
}
يتم استدعاء طريقة Symbol.iterator تلقائيًا بواسطة for..of
.
ولكن يمكننا أيضًا القيام بذلك "يدويًا":
مثال
let iterator = myNumbers[Symbol.iterator]();
while (true) {
const result = iterator.next();
if (result.done) break;
// Any Code Here
}