freeCodeCamp/guide/arabic/certifications/javascript-algorithms-and-d.../intermediate-algorithm-scri.../seek-and-destroy/index.md

7.9 KiB

title localeTitle
Seek and Destroy تسعى وتدمر

:triangular_flag_on_post: تذكر استخدام Read-Search-Ask إذا واجهتك مشكلة. حاول إقران البرنامج :busts_in_silhouette: واكتب الكود الخاص بك :pencil:

:checkered_flag: شرح المشكلة:

هذه المشكلة صعبة بعض الشيء لأنك يجب أن تتعرف على الحجج ، حيث سيكون عليك العمل مع اثنين أو أكثر ولكن على النص الذي ترونه فقط. كثير من الناس ترميز هذا البرنامج لثلاث حجج. ستقوم بإزالة أي رقم من الوسيطة الأولى وهو نفس أي وسيطة أخرى.

روابط ذات صلة

:speech_balloon: تلميح: 1

تحتاج إلى العمل مع arguments كما لو كانت مجموعة منتظمة. أفضل طريقة هي تحويله إلى واحد.

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 2

تحتاج إلى التصفية ، وهذا يعني أيضًا أنك تحتاج إلى إنشاء وظيفة رد اتصال. يمكنك استخدام أساليب مختلفة مثل: indexOf() ، includes() . إذا كنت بحاجة إلى طريقة أخرى ، فقد يكون reduce() أيضًا مفيدًا ؛ استمر في قراءة هذه المستندات!

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 3

لتحويل arguments إلى مصفوفة استخدم هذا الرمز var args = Array.prototype.slice.call(arguments);

حاول أن تحل المشكلة الآن

تنبيه المفسد!

علامة تحذير

الحل في المستقبل!

:beginner: الحل الأساسي للكود:

`function destroyer(arr) { var args = Array.prototype.slice.call(arguments);

for (var i = 0; i < arr.length; i++) { for (var j = 0; j < args.length; j++) { if (arr[i] === args[j]) { delete arr[i]; } } } return arr.filter(Boolean); } `

:rocket: تشغيل الكود

شرح الشفرة:

  1. إنشاء صفيف من arguments باستخدام Array.prototype.slice.call() وتخزينها في args متغير. سنستخدم هذا للتحقق من arr .

  2. بدء الأساسية for حلقة لتكرار خلال arr . عش آخر for حلقة داخل أولا، وتغيير عدد صحيح متغير j وصول إلى وسائط. سيتم تكرار هذه الحلقة الثانية من خلال args .

    • ضمن الحلقة الثانية إنشاء بيان if ، بالتحقق بدقة === أن الحالي val arr[i] يساوي args[j] .

    • إذا كانت القيمة في المؤشر الحالي تساوي في كل من المصفوفات، استخدم delete لإزالته من arr .

  3. خارج الحلقات المتداخلة: قم بإرجاع الصفيف المعدل باستخدام الكائن Boolean كمرشح لأي قيمة null تم إنشاؤها بواسطة عامل delete .

روابط ذات صلة

:sunflower: حل الشفرة المتوسطة:

function destroyer(arr) { var args = Array.from(arguments).slice(1); return arr.filter(function(val) { return !args.includes(val); }); }

:rocket: تشغيل الكود

شرح الشفرة:

  1. قم بتعريف متغير يسمى args وتعيينه يساوي كائن Array جديد from() arguments تم تمريرها إلى الدالة. على السطر نفسه أو التالي ، استخدم الطريقة slice() على args بدءًا من الفهرس الثاني ، 1. وهذا يفصل الوسيطات المستخدمة في التصفية في args الخاص من args .

  2. عودة مجموعة تصفيتها، وذلك باستخدام includes() في وظيفة رد الاتصال للتحقق مما إذا val ليس في args . إرجاع true للحفاظ على القيمة في الصفيف الأصلي أو false لإزالته.

روابط ذات صلة

الحل المتقدم للكود:

const destroyer = (arr, ...args) => arr.filter(i => !args.includes(i));

شرح الشفرة:

  • كود باستخدام صيغة ES6 لتعريف وظيفة باستخدام وظائف السهم.
  • استخدام عامل انتشار لاسترداد الحجج.
  • إرجاع الصف المفلتر ، باستخدام includes() .

روابط ذات صلة

:clipboard: ملاحظات للمساهمات:

  • :warning: لا تقم بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها مشابهة ولكن أفضل ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
  • أضف شرحًا لحلك.
  • تصنيف الحل في واحدة من الفئات التالية - الأساسي والمتوسط والمتقدم . :traffic_light:
  • الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي محتويات رئيسية ذات صلة . ( :warning: لا تزيل أي أسماء مستخدمين حالية )

نرى :point_right: Wiki Challenge Solution Template كمرجع.