Аргументы для поиска в лагере «Найди и уничтожь»

1

Я пытаюсь понять задачу Seek and Destroy ниже.

Задача: вам будет предоставлен исходный массив (первый аргумент в функции эсминца), за которым следуют один или несколько аргументов. Удалите все элементы из исходного массива, которые имеют такое же значение, что и эти аргументы.

This is the initial code below:
function destroyer(arr) {
  // Remove all the values
  return arr;
}

destroyer([1, 2, 3, 1, 2, 3], 2, 3);

После нескольких (действительно) нескольких попыток и поиска кода других людей я смог решить эту задачу. Однако, я думаю, это было больше не повезло. Ive скопировал мой код ниже, но я надеялся, что кто-то может прояснить пару вещей для меня.

  1. В приведенном ниже коде передается ли я возвращаю val или args в функцию iterateThroughArray. Это почему?

  2. Если я должен сравнивать ВСЕ аргументы против первого аргумента, где в этом коде я указываю это? Я продолжал думать, что мне нужно объединить первый аргумент, чтобы сравнить все другие аргументы против него или создать переменную для аргумента [0]. Любое руководство, которое вы можете предоставить, очень ценится!

function destroyer(arr) {
      var args = Array.from(arguments); //this also converts them to an array
       var iterateThroughArr = function (val) {
         if (args.indexOf(val) ===-1){
            return args;
          }
       };
       return arr.filter(iterateThroughArr);
    }
Теги:
function
filter
arguments
iteration

1 ответ

1
Лучший ответ

Это может звучать много, но вот мое объяснение

function destroyer(arr) {
      var args = Array.from(arguments); //Here arr is converted to [Array(6),2,3]
      //console.log(args)
    /*   var iterateThroughArr = function (val) {
         if (args.indexOf(val) ===-1){
            return args;
          }
       };
     
     return arr.filter(iterateThroughArr);
     */
     
     // to make more clear the above code can be rewritten as below
     var arr = arr.filter(function (val) {
          console.log("args = "+ args + " val = " + val + " indexOf(val) "  + args.indexOf(val) )
         // here you are itterating through each arr val which in this case is[1,2,3,1,2,3]
         // if you dont believe me uncomment the next console.log() and see the output
        // console.log(val) 
         if (args.indexOf(val) ===-1){
          // here is where the magic happens
          // Now you are checking if val exisists by using a builtin method called .indexOf()
          // In general, .indexOf() returns -1 if a value does not exist within an array
          //Below is working example
          /* var array = [1,2,3,4,5]
            console.log(array.indexOf(1)) // 0 since it is located at index 0
            console.log(array.indexOf(5)) // 4 since it is located at index 4
            console.log(array.indexOf(10))  // -1 since it does not exisit 
             */ 
           // Therefore, if value passes the above if statement 
          //then that means it doesnot exisit on args([Array(6),2,3])
           //which as a result will be included on the filtered array
           
            return args;
          }
       });
       
       return arr;
     
    }
    
    
 var val =    destroyer([1, 2, 3, 1, 2, 3], 2, 3);
 //console.log(val)

В принципе, вам нужно понять, как работает фильтр и как работает.indexOf. Подробнее см. В документации Mozilla: .indexOf() и .filter()

  • 0
    Дайте мне знать, если у вас есть какие-либо проблемы
  • 0
    большое спасибо! это здорово! 1 дополнительный вопрос: работает ли indexOf только с массивами, или он также может использоваться со строками?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню