مسیرها
/
JavaScript
JavaScript
/
تمرین‌ها
/
جادوهای الیز
جادوهای الیز

جادوهای الیز

تمرین یادگیری

مقدمه

در JavaScript، «آرایه» ساختاری شبیه فهرست است که طول ثابتی ندارد و می‌تواند هر نوعی از مقدارهای اولیه یا شیءها، حتی انواع مخلوط، را در خود نگه دارد.

برای ساختن آرایه، عنصرها را بین کروشه‌های [] قرار دهید. برای خواندن از آرایه، اندیس را بعد از شناسه داخل کروشه‌های [] بگذارید. اندیس‌های آرایه از صفر شروع می‌شوند.

برای مثال:

const numbers = [1, 'two', 3, 'four'];
numbers[2];
// => 3

برای به دست آوردن تعداد عنصرهای موجود در یک آرایه، از ویژگی length استفاده کنید:

const numbers = [1, 'two', 3, 'four'];
numbers.length;
// => 4

برای تغییر یک عنصر در آرایه، در آن اندیس مقداری را نسبت می‌دهید:

const numbers = [1, 'two', 3, 'four'];
numbers[0] = 'one';
numbers;
// => ['one', 'two', 3, 'four']

متد

برخی از متدها که روی هر شیء Array در دسترس‌اند، می‌توانند برای افزودن به آرایه یا حذف از آن به کار روند. در ادامه چند مورد را می‌بینید که هنگام کار روی این تمرین باید در نظر بگیرید:

push

می‌توان یک value را با استفاده از .push(value) به انتهای آرایه افزود. این متد طول جدید آرایه را برمی‌گرداند.

const numbers = [1, 'two', 3, 'four'];
numbers.push(5); // => 5
numbers;
// => [1, 'two', 3, 'four', 5]

pop

می‌توان آخرین value را با استفاده از .pop() از آرایه حذف کرد. این متد مقدار حذف‌شده را برمی‌گرداند. با این تغییر، طول آرایه کاهش می‌یابد.

const numbers = [1, 'two', 3, 'four'];
numbers.pop(); // => four
numbers;
// => [1, 'two', 3]

shift

می‌توان اولین value را با استفاده از .shift() از آرایه حذف کرد. این متد مقدار حذف‌شده را برمی‌گرداند. با این تغییر، طول آرایه کاهش می‌یابد.

const numbers = [1, 'two', 3, 'four'];
numbers.shift(); // => 1
numbers;
// => ['two', 3, 'four']

unshift

می‌توان یک value را با استفاده از .unshift(value) به ابتدای آرایه افزود. این متد طول جدید آرایه را برمی‌گرداند.

const numbers = [1, 'two', 3, 'four'];
numbers.unshift('one'); // => 5
numbers;
// => ['one', 1, 'two', 3, 'four']

splice

می‌توان یک value را در index مشخصی با استفاده از .splice(index, 1) از آرایه حذف کرد. این متد عنصر یا عنصرهای حذف‌شده را برمی‌گرداند.

const numbers = [1, 'two', 3, 'four'];
numbers.splice(2, 1, 'one'); // => [3]
numbers;
// => [1, 'two', 'one', 'four']
Advanced

این متدها قدرتمندتر از آن‌اند که توضیح داده شد:

  • هم push و هم unshift به شما اجازه می‌دهند با افزودن آرگومان‌های بیشتر، چند مقدار را یکجا push یا unshift کنید. برای کامل کردن این تمرین این کار لازم نیست.
  • Splice می‌تواند با افزایش آرگومان دوم، چند مقدار را حذف کند. برای کامل کردن این تمرین این کار لازم نیست.
  • Splice همچنین می‌تواند با افزودن آن‌ها به‌عنوان آرگومان بعد از deleteCount، چند مقدار را اضافه کند. از این کار می‌توان برای جایگزین کردن مقدارها یا درج مقدارها در میانه‌ی آرایه استفاده کرد (مثلاً با حذف ۰ عنصر). برای کامل کردن این تمرین این کار لازم نیست.

دستورالعمل‌ها

الیس به‌عنوان یک جادوگر تازه‌کار باید چند مبنای اولیه را تمرین کند. او یک دسته کارت دارد که می‌خواهد با آن‌ها کار کند.

برای اینکه کارها کمی راحت‌تر شود، او فقط از کارت‌های ۱ تا ۱۰ استفاده می‌کند، بنابراین دسته‌ی کارت‌هایش را می‌توان با یک آرایه از اعداد نمایش داد. موقعیت یک کارت مشخص با اندیس آن در آرایه متناظر است. یعنی موقعیت ۰ به کارت اول اشاره دارد، موقعیت ۱ به کارت دوم و به همین ترتیب.

Note

همه‌ی توابع به‌جز دو تابع باید آرایه‌ی کارت‌ها را به‌روزرسانی کنند و سپس آرایه‌ی تغییر‌یافته را برگردانند. این روشی رایج برای کار کردن است که به الگوی Builder معروف است و به شما امکان می‌دهد توابع را به‌خوبی به‌صورت زنجیره‌ای به هم وصل کنید.

دو استثنا عبارتند از getItem که باید کارت موجود در موقعیت داده‌شده را برگرداند و checkSizeOfStack که اگر اندازه‌ی داده‌شده مطابقت داشته باشد باید true را برگرداند.

1. یک کارت را از دسته بیرون بیاورید

برای برداشتن یک کارت، کارت موجود در اندیس position را از دسته‌ی داده‌شده برگردانید.

const position = 2;
getItem([1, 2, 4, 1], position);
// => 4

2. یک کارت را در دسته تعویض کنید

کمی تردستی کنید و کارت موجود در اندیس position را با کارت جایگزین داده‌شده عوض کنید. دسته‌ی تنظیم‌شده را برگردانید.

const position = 2;
const replacementCard = 6;
setItem([1, 2, 4, 1], position, replacementCard);
// => [1, 2, 6, 1]

3. یک کارت را در بالای دسته درج کنید

با درج یک کارت جدید در بالای دسته، کاری کنید که یک کارت ظاهر شود. دسته‌ی تنظیم‌شده را برگردانید.

const newCard = 8;
insertItemAtTop([5, 9, 7, 1], newCard);
// => [5, 9, 7, 1, 8]

4. یک کارت را از دسته حذف کنید

با حذف کارت موجود در position داده‌شده از دسته، کاری کنید که یک کارت ناپدید شود. دسته‌ی تنظیم‌شده را برگردانید.

const position = 2;
removeItem([3, 2, 6, 4, 8], position);
// => [3, 2, 4, 8]

5. کارت بالای دسته را حذف کنید

با حذف کارت بالای دسته، کاری کنید که یک کارت ناپدید شود. دسته‌ی تنظیم‌شده را برگردانید.

removeItemFromTop([3, 2, 6, 4, 8]);
// => [3, 2, 6, 4]

6. یک کارت را در پایین دسته درج کنید

با درج یک کارت جدید در پایین دسته، کاری کنید که یک کارت ظاهر شود. دسته‌ی تنظیم‌شده را برگردانید.

const newCard = 8;
insertItemAtBottom([5, 9, 7, 1], newCard);
// => [8, 5, 9, 7, 1]

7. یک کارت را از پایین دسته حذف کنید

با حذف کارت پایین دسته، کاری کنید که یک کارت ناپدید شود. دسته‌ی تنظیم‌شده را برگردانید.

removeItemAtBottom([8, 5, 9, 7, 1]);
// => [5, 9, 7, 1]

8. اندازه‌ی دسته را بررسی کنید

بررسی کنید که اندازه‌ی دسته با stackSize برابر است یا نه.

const stackSize = 4;
checkSizeOfStack([3, 2, 6, 4, 8], stackSize);
// => false
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
JavaScript Exercism

آماده‌اید جادوهای الیز را شروع کنید؟

در Exercism ثبت‌نام کنید تا JavaScript را همراه با 37 مفهوم159 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.