9.6 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
и arr на args. Этот второй цикл будет проходить черезargs
.-
Во втором цикле создайте оператор
if
, строго проверяя===
что текущий val ofarr[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
. -
Возвращает фильтрованную массив, используя
includes()
вval
args
includes()
в функции обратного вызова , чтобы проверить , еслиval
не вargs
; возвращаетtrue
чтобы сохранить значение в исходном массиве илиfalse
чтобы удалить его.
Связанные ссылки
Расширенное решение для кода:
const destroyer = (arr, ...args) => arr.filter(i => !args.includes(i));
Код Объяснение:
- Код с использованием синтаксиса ES6 для объявления функции с использованием функций стрелок.
- Использование оператора спреда для извлечения аргументов.
- Верните фильтрованный массив, используя
includes()
.
Связанные ссылки
ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:
- НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
- Добавьте объяснение своего решения.
- Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced .
- Пожалуйста, добавьте свое имя пользователя, только если вы добавили соответствующее основное содержимое . ( НЕ удаляйте существующие имена пользователей )
Видеть
Wiki Challenge Solution Template
дляWiki Challenge Solution Template
для справки.