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

آموزش spread آرایه در جاوااسکریپت؛ افزودن برچسب‌ها

destructuring و spread و rest در جاوااسکریپت · 0٪

✍️ علامت سه‌نقطه در جای ساخت آرایه، spread نام دارد و عضوهای یک آرایه را داخل آرایه تازه باز می‌کنه. با این روش می‌تونیم چند فهرست را به ترتیب کنار هم بذاریم، بدون این‌که به فهرست اولیه چیزی push کنیم. نتیجه یک ظرف تازه است که عضوها را از ورودی‌ها گرفته.

مثلاً [...['صبح'], ...['عصر','شب']] یک آرایه سه‌عضوی می‌سازه. اگر سه‌نقطه‌ها را حذف کنیم، نتیجه دو عضو دارد که هرکدام خودشان آرایه‌اند. این تفاوت بین کنار هم گذاشتن عضوها و کنار هم گذاشتن خود آرایه‌ها، خطای رایج این الگو است.

در تمرین، ترتیب برچسب‌های قبلی باید حفظ بشه و برچسب‌های جدید بعد از آن‌ها بیایند. تکرار یک برچسب مجاز است و نباید آن را حذف کنی. خروجی بخش original کمک می‌کنه ببینیم فهرست قبلی تغییر نکرده. اگر یکی از ورودی‌ها خالی باشه، آرایه دیگر همچنان با همان ترتیب وارد نتیجه می‌شه؛ اگر هر دو خالی باشند، نتیجه هم خالی است.

فعالیت شما

appendTags(tags, newTags) را کامل کن. هر دو آرایه رشته‌اند. {tags: آرایه ترکیبی, original: کپی tags اولیه} برگردان؛ برچسب‌های جدید بعد از قبلی‌ها و تکرارها حفظ شوند. ورودی‌ها تغییر نکنند. (['js'],['web']) => {tags:['js','web'],original:['js']}؛ دو آرایه خالی => دو آرایه خالی. تابع کمکی آماده checkAppendTagsUnchanged فقط تغییر نکردن ورودی و، هرجا لازم است، تازه بودن خروجی را بررسی می‌کند؛ آن را تغییر نده.

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

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

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

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

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

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

function appendTags(tags, newTags) {
  // TODO: spread را برای ساخت ترکیب مستقل به کار ببر.
}
function checkAppendTagsUnchanged(tags, newTags) {
  const before = JSON.stringify([tags, newTags]);
  const result = appendTags(tags, newTags);
  return JSON.stringify([tags, newTags]) === before && result.tags !== tags && result.tags !== newTags && result.original !== tags;
}