126 lines
9.6 KiB
Markdown
126 lines
9.6 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` и arr на args. Этот второй цикл будет проходить через `args` .
|
|||
|
|
|||
|
* Во втором цикле создайте оператор `if` , строго проверяя `===` что текущий val of `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` .
|
|||
|
|
|||
|
2. Возвращает фильтрованную массив, используя `includes()` в `val` `args` `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)
|
|||
|
|
|||
|
## Расширенное решение для кода:
|
|||
|
|
|||
|
```javascript
|
|||
|
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)
|
|||
|
|
|||
|
##  ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:
|
|||
|
|
|||
|
*  **НЕ** добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это **_похоже, но лучше_** , попробуйте объединить (или заменить) существующее подобное решение.
|
|||
|
* Добавьте объяснение своего решения.
|
|||
|
* Классифицируйте решение в одной из следующих категорий - **Basic** , **Intermediate** и **Advanced** . 
|
|||
|
* Пожалуйста, добавьте свое имя пользователя, только если вы добавили **соответствующее основное содержимое** . (  **_НЕ_** _удаляйте существующие имена пользователей_ )
|
|||
|
|
|||
|
> Видеть  [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) для [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272) для справки.
|