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

9.6 KiB
Raw Blame History

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 и arr на args. Этот второй цикл будет проходить через args .

    • Во втором цикле создайте оператор if , строго проверяя === что текущий val of 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 .

  2. Возвращает фильтрованную массив, используя includes() в val args includes() в функции обратного вызова , чтобы проверить , если val не в args ; возвращает true чтобы сохранить значение в исходном массиве или false чтобы удалить его.

Связанные ссылки

Расширенное решение для кода:

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

Код Объяснение:

  • Код с использованием синтаксиса ES6 для объявления функции с использованием функций стрелок.
  • Использование оператора спреда для извлечения аргументов.
  • Верните фильтрованный массив, используя includes() .

Связанные ссылки

:clipboard: ПРИМЕЧАНИЯ ДЛЯ ВЗНОСОВ:

  • :warning: НЕ добавляйте решения, похожие на любые существующие решения. Если вы считаете, что это похоже, но лучше , попробуйте объединить (или заменить) существующее подобное решение.
  • Добавьте объяснение своего решения.
  • Классифицируйте решение в одной из следующих категорий - Basic , Intermediate и Advanced . :traffic_light:
  • Пожалуйста, добавьте свое имя пользователя, только если вы добавили соответствующее основное содержимое . ( :warning: НЕ удаляйте существующие имена пользователей )

Видеть :point_right: Wiki Challenge Solution Template для Wiki Challenge Solution Template для справки.