پروژه اولیه

پروژه اولیه را از این لینک دانلود کنید.

ساختار فایل‌های این پروژه به صورت زیر است:

removeDuplicate
├── src
│   └── index.js
├── jest.config.js
├── package-lock.json
└── package.json
Plain text

برای اینکه کادر اجرایی بوت‌کمپ بتوانند راحت‌تر و سریع‌تر به داده‌های کدآموزهای بوت‌کمپ دسترسی داشته باشند، نگهداری و بررسی آن‌ها اهمیت زیادی دارد. اما متاسفانه هنگام وارد کردن این اطلاعات به صورت دستی، مشکلی پیش آمد و اسم بعضی از کدآموزها بیشتر از یک بار وارد شد...!

از طرف مدیر بوت‌کمپ، تسکی به شما داده شده تا با پیاده‌سازی تابع removeDuplicateStudents، کدآموزهای تکراری را پیدا کنید و فقط یک نسخه از داده‌های مربوط به هر کاربر را حفظ و بقیه را حذف کنید.

برای پیاده‌سازی تابع removeDuplicateStudents لازم است به این موارد دقت کنید:

  1. این تابع به عنوان ورودی، یک آرایه دریافت می‌کند. عناصر این آرایه، آبجکت‌هایی هستند که هر کدام از آن‌ها مربوط به اطلاعات یک کدآموز است.

  2. هر آبجکت مربوط به اطلاعات یک کدآموز دارای پراپرتی‌های زیر است:

    1. level
    2. grade*
    3. name*
    4. lastName*
    5. birthDate*
    6. nationality
    7. email
  3. از ترکیب مقدار پراپرتی‌های grade، name، lastNam، birthDate می‌توان برای مشخص کردن و تفکیک کدآموز‌ها استفاده کرد. به عبارت دیگر نباید هیچ دو کدآموزی با مقادیر برابر این ویژگی‌ها وجود داشته باشند و ترکیب این مقادیر برای هر کدآموز منحصربفرد هستند.

  4. در صورتی که چند نسخه از اطلاعات یک کدآموز موجود بود، نسخه‌ای که مقدار پراپرتی level در آن بیشتر است، نگهداری می‌شود و بقیه نسخه‌ها حذف می‌شوند.

  5. در صورتی که مقدار پراپرتی level در چند نسخه از اطلاعات یک کدآموز مشترک بود، اولویت با نسخه‌ای که دارای مقدار index کمتری است خواهد بود و بقیه نسخه‌ها حذف می‌شوند.

  6. همه‌ی عناصر آرایه خروجی باید دارای یک پراپرتی اضافه با کلید id باشند، مقدار id از ترکیب مقدار پراپرتی‌های grade، name، lastNam، birthDate به ترتیب از راست به چپ به دست می‌آید.

مثال

در مثال زیر سه نسخه از اطلاعات کاربری به اسم Jone doe وجود دارد. از آنجا که تمامی چهار ویژگی grade، name، lastNam، birthDate در این سه شیء برابر هستند، نتیجه می‌گیریم اطلاعات این کاربر سه بار و به صورت تکراری ذخیره شده است.

برای تشخیص نسخه معتبر، ابتدا ویژگی level را بررسی می‌کنیم و آبجکتی که مقدار level بیشتری دارد را نگه داشته و بقیه را حذف می‌کنیم.

در ادامه دو آبجکت که مقدار پراپرتی level در هردوی آن‌ها برابر ۳ است را بر اساس جایگاهشان در آرایه مقایسه کرده و آبجکتی که index کوچکتری دارد را نگه داشته و بقیه نسخه‌ها را حذف می کنیم.

نباید فراموش کنیم که در آرایه خروجی، تمامی عناصر آرایه دارای پراپرتی id هستند. مقدار id از ترکیب مقادیر پراپرتی‌های grade، name، lastNam، birthDate به ترتیب حاصل می‌شود.

ورودی

const studentsArray = [
  { 
    level: 2, 
    grade: 10, 
    name: "John", 
    lastName: "Doe", 
    birthDate: "2002-05-20", 
    nationality: "American", 
    email: "john.doe@example.com" 
  },
  { 
    level: 3, 
    grade: 10, 
    name: "John", 
    lastName: "Doe", 
    birthDate: "2002-05-20", 
    nationality: "American", 
    email: "john.doe@example.com" 
  },
  { 
    level: 3, 
    grade: 10, 
    name: "John", 
    lastName: "Doe", 
    birthDate: "2002-05-20", 
    nationality: "Iran", 
    email: "john.doe@example.com" 
  },
  { 
    level: 3, 
    grade: 10, 
    name: "Saimon", 
    lastName: "Jonse", 
    birthDate: "2002-06-20", 
    nationality: "Italy", 
    email: "Saimon.Jonse@example.com" 
  },
];

Plain text

خروجی

const studentsArray = [
  { 
    level: 3, 
    grade: 10, 
    name: "John", 
    lastName: "Doe", 
    birthDate: "2002-05-20", 
    nationality: "American", 
    email: "john.doe@example.com",
    id: "10JohnDoe2002-05-20" 
  },
  { 
    level: 3, 
    grade: 10, 
    name: "Saimon", 
    lastName: "Jonse", 
    birthDate: "2002-06-20", 
    nationality: "Italy", 
    email: "Saimon.Jonse@example.com",
    id: "10SaimonJonse2002-06-20" 
  },
];

Plain text

جزئیات

  1. تابع removeDuplicate آرایه‌ای از اطلاعات کدآموز‌ها را به عنوان ورودی دریافت می‌کند.
  2. خروجی تابع removeDuplicate آرایه‌ای از اطلاعات کدآموز‌هاست که نسخه‌های تکراری اطلاعات در آن حذف شده و هر کدام از عناصر آن دارای پراپرتی id باشد.
  3. شما تنها مجاز به تغییر فایل index.js هستید.
  4. فایل ارسالی شما باید index.js باشد.

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.