موضوعهای قابل جستجو در JavaScript
شیء قابل تکرار میتواند شیءهایی هستند که قابل تکرار هستند (مانند آرایهها).
شیء قابل تکرار میتواند از طریق کد ساده و کارآمد دسترسی پیدا کند.
شیء قابل تکرار میتواند for..of
تکرار به صورت تناوبی انجام میشود.
تکرار ... از
for..of
عبارتهای استفاده شده برای مرور عناصر یک شیء قابل تکرار است.
نحوه
برای (متغیر of iterable) { // کد باید اجرا شود }
تکرار
تکرار به راحتی قابل فهم است.
این تنها به معنای مرور یک مجموعه از عناصر است.
در زیر چند مثال ساده آورده شده است:
- مرور رشته
- مرور آرایه
مرور رشته
میتوان از for..of
تکتک مرور عناصر رشته:
مثال
const name = "W3Schools"; برای (const x of name) { // کد باید اجرا شود }
مرور آرایه
میتوان از for..of
تکتک مرور عناصر آرایه:
مثال 1
const letters = ["a","b","c"]; برای (به عنوان مثال x of حروف) { // کد باید اجرا شود }
مثال 2
const numbers = [2,4,6,8]; برای (const x of numbers) { // کد باید اجرا شود }
مرور Set
میتوان از for..of
تکتک مرور عناصر Set:
مثال
const حروف = new Set(["a","b","c"]);}} برای (به عنوان مثال x of حروف) { // کد باید اجرا شود }
نکته:ما در فصلهای بعدی Set و Map را به طور کامل توضیح خواهیم داد.
برای بارور کردن Map استفاده کرد
میتوان از for..of
برای بارور کردن عناصر Map:
مثال
const میوهها = new Map([ ["apples", 500] ["bananas", 300], ["oranges", 200] ]); برای (به عنوان مثال x of میوهها) { // کد باید اجرا شود }
ایترایزر JavaScript
پروتکل ایترایزر تعریف میکند که چگونه از یک شیء مقادیر تولید میکندیک سری از مقادیر،
وقتی که یک شیء next()
وقتی که یک شیء روشیترایزر،
next()
روش باید یک شیء شامل دو ویژگی بازگرداند:
- value (مقدار بعدی)
- done (true یا false)
value |
مقدار بازگردانده شده توسط ایترایزر. اگر done به true باشد، میتوان آن را حذف کرد. |
done |
اگر ایترایزر تمام شده است، به true است. اگر ایترایزر مقدار جدیدی ایجاد کند، به false است. |
توجه:
از لحاظ فنی، اشیاء قابل ایترایز باید روش Symbol.iterator را پیادهسازی کنند.
رشتهها، آرایهها، TypedArray، Map و Set اشیاء قابل ایترایز هستند زیرا پروتوتایپهای آنها روش Symbol.iterator دارند.
اشیاء قابل ایترایز تعریف شده توسط کاربر
در مثال زیر یک اشیاء قابل ایترایز تعریف شده توسط کاربر نمایش داده شده است، که هرگز تمام نمیشود و هر بار که فراخوانی میشود next()
همه بازمیگردند به 10, 20, 30, 40, ...:
مثال
// ایجاد اشیاء قابل ایترایز تعریف شده توسط کاربر функشن myNumbers() { let n = 0; return { next: function() { n += 10; بازمیگردد { value: n, done: false }; } }; } // ایجاد اشیاء قابل ایترایز const n = myNumbers(); n.next(); // بازمیگردد به 10 n.next(); // بازمیگردد به 20 n.next(); // بازمیگردد به 30
مشکل:
اشیاء قابل ایترایز تعریف شده توسط کاربر از دستورات JavaScript پشتیبانی نمیکنند for..of
است.
اشیاء قابل ایترایز که از دستور for..of پشتیبانی میکنند
اشیاء قابل ایترایز JavaScript دارای Symbol.iterator اشیاء
Symbol.iterator یک چیزی است که next()
функشن
میتوان از کد زیر برای ایترایز کردن اشیاء قابل ایترایز استفاده کرد:
برای (به عنوان مثال 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; // کد هرچه دلخواه }