125 lines
7.9 KiB
Markdown
125 lines
7.9 KiB
Markdown
![]() |
---
|
|||
|
title: Seek and Destroy
|
|||
|
localeTitle: تسعى وتدمر
|
|||
|
---
|
|||
|
 تذكر استخدام **`Read-Search-Ask`** إذا واجهتك مشكلة. حاول إقران البرنامج  واكتب الكود الخاص بك 
|
|||
|
|
|||
|
###  شرح المشكلة:
|
|||
|
|
|||
|
هذه المشكلة صعبة بعض الشيء لأنك يجب أن تتعرف على الحجج ، حيث سيكون عليك العمل مع اثنين **أو أكثر** ولكن على النص الذي ترونه فقط. كثير من الناس ترميز هذا البرنامج لثلاث حجج. ستقوم بإزالة أي رقم من الوسيطة الأولى وهو نفس أي وسيطة أخرى.
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [كائن الحجج](http://forum.freecodecamp.com/t/javascript-arguments/14283)
|
|||
|
* [Array.filter ()](http://forum.freecodecamp.com/t/javascript-array-prototype-filter/14289)
|
|||
|
|
|||
|
##  تلميح: 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);
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
 [تشغيل الكود](https://repl.it/CLjU/95)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
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` .
|
|||
|
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* \[الحجج
|
|||
|
* [Array.filter ()](http://forum.freecodecamp.com/t/javascript-array-prototype-filter/14289)
|
|||
|
* [حذف](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/delete)
|
|||
|
* [منطقية](http://forum.freecodecamp.com/t/javascript-boolean/14311)
|
|||
|
|
|||
|
##  حل الشفرة المتوسطة:
|
|||
|
|
|||
|
`function destroyer(arr) {
|
|||
|
var args = Array.from(arguments).slice(1);
|
|||
|
return arr.filter(function(val) {
|
|||
|
return !args.includes(val);
|
|||
|
});
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
 [تشغيل الكود](https://repl.it/Ck2m/0)
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
1. قم بتعريف متغير يسمى `args` وتعيينه يساوي كائن `Array` جديد `from()` `arguments` تم تمريرها إلى الدالة. على السطر نفسه أو التالي ، استخدم الطريقة `slice()` على `args` بدءًا من الفهرس الثاني ، 1. وهذا يفصل الوسيطات المستخدمة في التصفية في `args` الخاص من `args` .
|
|||
|
|
|||
|
2. عودة مجموعة تصفيتها، وذلك باستخدام `includes()` في وظيفة رد الاتصال للتحقق مما إذا `val` _ليس_ في `args` . إرجاع `true` للحفاظ على القيمة في الصفيف الأصلي أو `false` لإزالته.
|
|||
|
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [الحجج](http://forum.freecodecamp.com/t/javascript-arguments/14283)
|
|||
|
* [Array.slice ()](http://forum.freecodecamp.com/t/javascript-array-prototype-slice/14302)
|
|||
|
* [Array.includes ()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes)
|
|||
|
|
|||
|
## الحل المتقدم للكود:
|
|||
|
|
|||
|
`const destroyer = (arr, ...args) => arr.filter(i => !args.includes(i));
|
|||
|
`
|
|||
|
|
|||
|
### شرح الشفرة:
|
|||
|
|
|||
|
* كود باستخدام صيغة ES6 لتعريف وظيفة باستخدام وظائف السهم.
|
|||
|
* استخدام عامل انتشار لاسترداد الحجج.
|
|||
|
* إرجاع الصف المفلتر ، باستخدام `includes()` .
|
|||
|
|
|||
|
#### روابط ذات صلة
|
|||
|
|
|||
|
* [انتشار المشغل](https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Spread_operator)
|
|||
|
|
|||
|
##  ملاحظات للمساهمات:
|
|||
|
|
|||
|
*  **لا تقم** بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها **_مشابهة ولكن أفضل_** ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
|
|||
|
* أضف شرحًا لحلك.
|
|||
|
* تصنيف الحل في واحدة من الفئات التالية - **الأساسي** **والمتوسط** **والمتقدم** . 
|
|||
|
* الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي **محتويات رئيسية ذات صلة** . (  **_لا_** _تزيل أي أسماء مستخدمين حالية_ )
|
|||
|
|
|||
|
> نرى  [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) كمرجع.
|