Javascript 寻找并摧毁自由代码阵营挑战的论据

Javascript 寻找并摧毁自由代码阵营挑战的论据,javascript,function,filter,arguments,iteration,Javascript,Function,Filter,Arguments,Iteration,我试图理解下面的搜索和销毁挑战 任务:将为您提供一个初始数组(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); 经过几次(实际上)尝试并查看其他人的代码后,我能够解决

我试图理解下面的搜索和销毁挑战

任务:将为您提供一个初始数组(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);
经过几次(实际上)尝试并查看其他人的代码后,我能够解决该任务。然而,我认为这更多的是出于运气。我复制了下面的代码,但我希望有人能为我澄清一些事情

  • 下面的代码传递在iteratethrawarray函数中返回val还是args。为什么呢

  • 如果我要将所有参数与第一个参数进行比较,那么在这段代码中我在哪里指出了这一点?我一直在想我需要拼接第一个参数来比较所有其他参数,或者为参数[0]创建一个变量。非常感谢您提供的任何指导

  • 功能销毁程序(arr){
    var args=Array.from(arguments);//这还会将它们转换为数组
    var iteratethrawarr=函数(val){
    if(参数索引of(val)=-1){
    返回args;
    }
    };
    返回arr.filter(iteratethrawarr);
    
    }
    这听起来很难理解,但下面是我的解释

    功能销毁程序(arr){
    var args=Array.from(arguments);//这里arr被转换为[Array(6),2,3]
    //console.log(args)
    /*var iteratethrawarr=函数(val){
    if(参数索引of(val)=-1){
    返回args;
    }
    };
    返回arr.filter(iteratethrawarr);
    */
    //为了更清楚,上面的代码可以重写如下
    var arr=arr.filter(函数(val){
    console.log(“args=“+args+”val=“+val+”indexOf(val)”+args.indexOf(val))
    //在这里,您通过每个arr val进行评级,在本例中,该arr val为[1,2,3,1,2,3]
    //如果您不相信我,请取消注释下一个console.log()并查看输出
    //console.log(val)
    if(参数索引of(val)=-1){
    //这就是魔法发生的地方
    //现在,您可以使用名为.indexOf()的内置方法检查val是否存在
    //通常,如果数组中不存在值,.indexOf()将返回-1
    //下面是一个工作示例
    /*变量数组=[1,2,3,4,5]
    console.log(array.indexOf(1))//0,因为它位于索引0处
    console.log(array.indexOf(5))//4,因为它位于索引4
    console.log(array.indexOf(10))/-1,因为它不存在
    */ 
    //因此,if值传递上述if语句
    //这意味着它不存在于args([Array(6),2,3])上
    //其结果将包括在过滤后的数组中
    返回args;
    }
    });
    返回arr;
    }
    var val=驱逐舰([1,2,3,1,2,3],2,3);
    //console.log(val)
    尝试一下:

    功能销毁程序(arr){
    //arr1等于arr内部的数组
    var arr1=arr.slice(参数);
    //arr2变成一个参数为2和3的数组
    var arr2=Array.prototype.slice.call(参数,1);
    //此函数用于比较两者,并返回元素不等于参数的数组
    返回arr1.concat(arr2.filter)(函数(项){
    返回!arr1.包括(项目)| |!arr2.包括(项目)
    })
    }
    
    驱逐舰([1,2,3,1,2,3],2,3)如果您有任何问题,请告诉我。非常感谢!这太棒了!1个后续问题:indexOf是否仅适用于数组,还是也可以用于字符串?