7.9 KiB
title | localeTitle |
---|---|
Seek and Destroy | تسعى وتدمر |
تذكر استخدام Read-Search-Ask
إذا واجهتك مشكلة. حاول إقران البرنامج واكتب الكود الخاص بك
شرح المشكلة:
هذه المشكلة صعبة بعض الشيء لأنك يجب أن تتعرف على الحجج ، حيث سيكون عليك العمل مع اثنين أو أكثر ولكن على النص الذي ترونه فقط. كثير من الناس ترميز هذا البرنامج لثلاث حجج. ستقوم بإزالة أي رقم من الوسيطة الأولى وهو نفس أي وسيطة أخرى.
روابط ذات صلة
تلميح: 1
تحتاج إلى العمل مع arguments
كما لو كانت مجموعة منتظمة. أفضل طريقة هي تحويله إلى واحد.
حاول أن تحل المشكلة الآن
تلميح: 2
تحتاج إلى التصفية ، وهذا يعني أيضًا أنك تحتاج إلى إنشاء وظيفة رد اتصال. يمكنك استخدام أساليب مختلفة مثل: indexOf()
، includes()
. إذا كنت بحاجة إلى طريقة أخرى ، فقد يكون reduce()
أيضًا مفيدًا ؛ استمر في قراءة هذه المستندات!
حاول أن تحل المشكلة الآن
تلميح: 3
لتحويل arguments
إلى مصفوفة استخدم هذا الرمز var args = Array.prototype.slice.call(arguments);
حاول أن تحل المشكلة الآن
تنبيه المفسد!
الحل في المستقبل!
الحل الأساسي للكود:
`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); } `
شرح الشفرة:
-
إنشاء صفيف من
arguments
باستخدامArray.prototype.slice.call()
وتخزينها فيargs
متغير. سنستخدم هذا للتحقق منarr
. -
بدء الأساسية
for
حلقة لتكرار خلالarr
. عش آخرfor
حلقة داخل أولا، وتغيير عدد صحيح متغيرj
وصول إلى وسائط. سيتم تكرار هذه الحلقة الثانية من خلالargs
.-
ضمن الحلقة الثانية إنشاء بيان
if
، بالتحقق بدقة===
أن الحالي valarr[i]
يساويargs[j]
. -
إذا كانت القيمة في المؤشر الحالي تساوي في كل من المصفوفات، استخدم
delete
لإزالته منarr
.
-
-
خارج الحلقات المتداخلة: قم بإرجاع الصفيف المعدل باستخدام الكائن
Boolean
كمرشح لأي قيمةnull
تم إنشاؤها بواسطة عاملdelete
.
روابط ذات صلة
-
الحجج
- Array.filter ()
- حذف
- منطقية
حل الشفرة المتوسطة:
function destroyer(arr) { var args = Array.from(arguments).slice(1); return arr.filter(function(val) { return !args.includes(val); }); }
شرح الشفرة:
-
قم بتعريف متغير يسمى
args
وتعيينه يساوي كائنArray
جديدfrom()
arguments
تم تمريرها إلى الدالة. على السطر نفسه أو التالي ، استخدم الطريقةslice()
علىargs
بدءًا من الفهرس الثاني ، 1. وهذا يفصل الوسيطات المستخدمة في التصفية فيargs
الخاص منargs
. -
عودة مجموعة تصفيتها، وذلك باستخدام
includes()
في وظيفة رد الاتصال للتحقق مما إذاval
ليس فيargs
. إرجاعtrue
للحفاظ على القيمة في الصفيف الأصلي أوfalse
لإزالته.
روابط ذات صلة
الحل المتقدم للكود:
const destroyer = (arr, ...args) => arr.filter(i => !args.includes(i));
شرح الشفرة:
- كود باستخدام صيغة ES6 لتعريف وظيفة باستخدام وظائف السهم.
- استخدام عامل انتشار لاسترداد الحجج.
- إرجاع الصف المفلتر ، باستخدام
includes()
.
روابط ذات صلة
ملاحظات للمساهمات:
- لا تقم بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها مشابهة ولكن أفضل ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
- أضف شرحًا لحلك.
- تصنيف الحل في واحدة من الفئات التالية - الأساسي والمتوسط والمتقدم .
- الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي محتويات رئيسية ذات صلة . ( لا تزيل أي أسماء مستخدمين حالية )
نرى
Wiki Challenge Solution Template
كمرجع.