✍️ یک پردازشگر وقتی کاربردی میشه که پیمایش داده را از تصمیم درباره تبدیل جدا کنه. میتونیم یک callback برای مربع کردن و یکی برای تغییر علامت داشته باشیم؛ بخش پیمایش فقط هر مقدار را به callback میده و نتیجه را در آرایه تازه ذخیره میکنه. به این ترتیب، ساختار حلقه برای هر رفتار دوباره نوشته نمیشه.
برای نمونه، تبدیل طولها از متر به سانتیمتر یعنی همان پیمایش ثابت با تابع x => x * 100. اگر دادهای نداشته باشیم، callback هم لازم نیست اجرا بشه و خروجی طبیعی یک آرایه خالی است. در بخش بعد روش کوتاهتر این الگو، یعنی map، را یاد میگیریم؛ اینجا حلقه ساده کاملاً کافی است.
در تمرین، ترتیب ورودی باید حفظ بشه و خود آرایه ورودی نباید تغییر کنه. برای حالت ناشناخته، تابع همانی x => x مناسب است. خطای رایج، استفاده از push روی آرایه ورودی یا برگرداندن فقط آخرین نتیجه است. یک آرایه خروجی جدا بساز و برای هر عضو دقیقاً یک نتیجه به آن اضافه کن.
فعالیت شما
processNumbers(values, mode) را بنویس. values آرایه اعداد متناهی است. برای 'square' مربع، برای 'negate' منفی هر عدد و برای حالت دیگر خود اعداد را در آرایه جدید و به همان ترتیب برگردان. ورودی تغییر نکند؛ ([-2,3],'square') => [4,9] و آرایه خالی => []. تابع کمکی آماده checkProcessNumbersUnchanged فقط تغییر نکردن ورودی و، هرجا لازم است، تازه بودن خروجی را بررسی میکند؛ آن را تغییر نده.