حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
آموزش جاوااسکریپت تکمیلی؛ توابع و پردازش داده

ساخت تابع پردازشگر جاوااسکریپت؛ اعمال callback روی آرایه

توابع پیکانی و callback در جاوااسکریپت · 0٪

✍️ یک پردازشگر وقتی کاربردی می‌شه که پیمایش داده را از تصمیم درباره تبدیل جدا کنه. می‌تونیم یک callback برای مربع کردن و یکی برای تغییر علامت داشته باشیم؛ بخش پیمایش فقط هر مقدار را به callback می‌ده و نتیجه را در آرایه تازه ذخیره می‌کنه. به این ترتیب، ساختار حلقه برای هر رفتار دوباره نوشته نمی‌شه.

برای نمونه، تبدیل طول‌ها از متر به سانتی‌متر یعنی همان پیمایش ثابت با تابع x => x * 100. اگر داده‌ای نداشته باشیم، callback هم لازم نیست اجرا بشه و خروجی طبیعی یک آرایه خالی است. در بخش بعد روش کوتاه‌تر این الگو، یعنی map، را یاد می‌گیریم؛ اینجا حلقه ساده کاملاً کافی است.

در تمرین، ترتیب ورودی باید حفظ بشه و خود آرایه ورودی نباید تغییر کنه. برای حالت ناشناخته، تابع همانی x => x مناسب است. خطای رایج، استفاده از push روی آرایه ورودی یا برگرداندن فقط آخرین نتیجه است. یک آرایه خروجی جدا بساز و برای هر عضو دقیقاً یک نتیجه به آن اضافه کن.

فعالیت شما

processNumbers(values, mode) را بنویس. values آرایه اعداد متناهی است. برای 'square' مربع، برای 'negate' منفی هر عدد و برای حالت دیگر خود اعداد را در آرایه جدید و به همان ترتیب برگردان. ورودی تغییر نکند؛ ([-2,3],'square') => [4,9] و آرایه خالی => []. تابع کمکی آماده checkProcessNumbersUnchanged فقط تغییر نکردن ورودی و، هرجا لازم است، تازه بودن خروجی را بررسی می‌کند؛ آن را تغییر نده.

مطالعهٔ این گام برای همه آزاد است

برای پاسخ‌دادن، بررسی پاسخ، ثبت پیشرفت و استفاده از دستیار باید شرایط شرکت در فعالیت‌ها را داشته باشید.

برای انجام فعالیت وارد شوید

فعالیت‌های این بخش به اشتراک فعال نیاز دارند. تهیهٔ اشتراک

برای انجام فعالیت‌ها ابتدا این دوره‌های پیش‌نیاز را تکمیل کنید:

کد اولیهٔ فعالیت

function processNumbers(values, mode) {
  // TODO: callback مناسب و آرایه نتیجه را بساز.
}
function checkProcessNumbersUnchanged(values, mode) {
  const before = JSON.stringify([values, mode]);
  const result = processNumbers(values, mode);
  return JSON.stringify([values, mode]) === before && result !== values;
}