تکرارگرها (Iterators)
«تکرارگر (Iterator)» ابزاری برای گرفتن عناصر به ترتیب است. هر بار با متد next() یک مقدار می دهد. این روش، پیمایش را دقیق و مرحله ای می کند.
متد next() و خروجی آن
متد next() یک شیء برمی گرداند: { value, done }. وقتی done برابر true شد، پیمایش تمام است.
// نمونه مفهومی خروجی next()
// { value: مقدار, done: وضعیت پایان }
حلقه for...of و قابل تکرارها
حلقه for...of روی «قابل تکرار (Iterable)» می چرخد. قابل تکرار باید Symbol.iterator داشته باشد.
for (const item of iterable) {
// کد برای هر عنصر
}
نکته: رشته ها، آرایه ها، TypedArray، Set و Map قابل تکرار هستند.
تابع کمکی Iterator.from()
Iterator.from() از یک قابل تکرار، یک تکرارگر می سازد. سپس می توان با for...of پیمایش کرد.
// ساخت تکرارگر از آرایه
const myIterator = Iterator.from([1, 2, 3]);
let text = "";
for (const x of myIterator) {
text += x;
}
فیلتر کردن با filter()
filter() فقط عناصرِ قبول شده توسط تابع شرط را عبور می دهد.
const myIterator = Iterator.from([32, 33, 16, 40]);
const filteredIterator = myIterator.filter((x) => x > 18);
تبدیل با map()
map() هر عنصر را با تابع نگاشت، تبدیل می کند و تکرارگر جدید می دهد.
const myIterator = Iterator.from("123456789");
const mappedIterator = myIterator.map((x) => x * 2);
گسترده سازی با flatMap()
flatMap() هر عنصر را نگاشت می کند و سپس نتیجه ها را تخت می کند.
const myIterator = Iterator.from([1, 2, 3, 4, 5, 6]);
const mappedIterator = myIterator.flatMap((x) => [x, x * 10]);
برداشتن n عنصر با take()
take(n) فقط n عنصر اول را می دهد. بقیه حذف می شود.
const myIterator = Iterator.from([1, 2, 3, 4, 5, 6]);
const firstFive = myIterator.take(5);
رد کردن n عنصر با drop()
drop(n) n عنصر اول را رد می کند و بقیه را می دهد.
const myIterator = Iterator.from([1, 2, 3, 4, 5, 6]);
const afterFive = myIterator.drop(5);
پیدا کردن با find()
find(fn) اولین عنصر مطابق شرط را برمی گرداند.
const myIterator = Iterator.from([3, 10, 18, 30, 20]);
let result = myIterator.find((x) => x > 18);
کاهش با reduce()
reduce() با یک انباشتگر کار می کند و به یک مقدار نهایی می رسد.
const myIterator = Iterator.from([175, 50, 25]);
function myFunc(total, value) {
return total - value;
}
let result = myIterator.reduce(myFunc);
بررسی همه/بعضی: every() و some()
every() بررسی می کند همه عناصر شرط را پاس کنند. some() بررسی می کند حداقل یکی پاس شود.
const it1 = Iterator.from("123456789");
let allGreater7 = it1.every((x) => x > 7);
const it2 = Iterator.from("123456789");
let anyGreater7 = it2.some((x) => x > 7);
اجرای تابع روی همه: forEach()
forEach() روی هر عنصر تابعی را اجرا می کند.
const myIterator = Iterator.from("123456789");
let text = "";
myIterator.forEach((x) => {
text += x;
});
جمع بندی سریع
- تکرارگر با
next()جلو می رود. valueمقدار است؛doneپایان را می گوید.Iterator.from()از قابل تکرار، تکرارگر می سازد.- توابع کمکی مثل
mapوfilterمستقیم کار می کنند.
ادامه مطالعه: قابل تکرارها و حلقه زنی.