我正在尝试了解下面的“寻求并摧毁”挑战。

任务:将为您提供一个初始数组(destroyer函数中的第一个参数),后跟一个或多个参数。从初始数组中删除与这些参数具有相同值的所有元素。

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

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


经过几次(确实)几次尝试并查看了其他人的代码,我得以解决该任务。但是,我认为这很不走运。我已在下面复制了我的代码,但我希望有人可以为我澄清几件事。


无论我在iterateThroughArray函数内返回val还是args,下面的代码都会通过。这是为什么?
如果我应该将所有参数与第一个参数进行比较,那么在这段代码中我在哪里指出呢?我一直认为我需要拼接第一个参数以将所有其他参数与此参数进行比较,或者为arguments [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 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()

关于javascript - 寻找并销毁Freecode营地挑战的争论,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45497108/

10-13 21:51