Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Array.filter()方法的奇怪输出_Javascript - Fatal编程技术网

Javascript 使用Array.filter()方法的奇怪输出

Javascript 使用Array.filter()方法的奇怪输出,javascript,Javascript,在下面的代码中,我期望得到destropher的结果([1,2,3,1,2,3],2,3)将是[1,1] 但结果是[1,2,3,1,2,3] 我哪里做错了 function destroyer(arr) { function hlp(x) { for(var i=1; i<arguments.length ; i++) { if(x == arguments[i]) return false; } return true; } return

在下面的代码中,我期望得到destropher的结果([1,2,3,1,2,3],2,3)将是
[1,1]

但结果是
[1,2,3,1,2,3]

我哪里做错了

function destroyer(arr) {
  function hlp(x) {
    for(var i=1; i<arguments.length ; i++) {
      if(x == arguments[i]) return false;
    }
    return true;
  }
  return arr.filter(hlp);
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
功能销毁程序(arr){
函数hlp(x){

对于(var i=1;i您定义了
destropher
,当您传入多个参数时,只接受一个参数。
参数
未定义,在传递给
Array.filter()
的函数中迭代不是一个好主意。
Array.filter()
为您检查每个元素。这并不是说它在您的代码中可以工作,而是如果可以,最好只返回
x==arguments[i]
,而不是检查它是
true
还是
false
。如果返回
x==arguments[i]
您实际上返回的是一个布尔值。下面代码中的示例是I
返回exclude.indexOf(I)==-1;
。请尝试以下方法:

功能销毁程序(arr,排除){
返回arr.filter(函数(i){
返回exclude.indexOf(i)=-1;
});
}
log(destroyer([1,2,3,1,2,3],[2,3]);
您可以使用ES6并使用
include()检查数组是否包含这些参数中的任何一个

函数销毁程序(arr,…rest){
职能hlp(e){
返回!休息。包括(e)
}
返回阵列滤波器(hlp);
}
console.log(destroyer([1,2,3,1,2,3],2,3));
以两种方式解决:

第一:

功能销毁程序(arr){
函数hlp(x){

对于(变量i=1;i
destoryer()
函数只接受一个参数,但您在调用时传递了三个参数。@abhishekkannojia是的,接受的一个参数是数组,后一个参数隐式传递给函数的
参数
对象。不是吗?是的,是的,但是如果您想在
hlp()中使用它们
,然后您必须在
hlp()中再次传递它们
函数。
参数
数组内部
hlp
指的是它自己的参数数组,而不是外部函数的s@abhishekkannojia哦,是的,这被忽略了。我还有什么地方出错吗?是的,一个参数通过
arr
参数传递,这个参数是第一个参数。后一个参数ts是通过
arguments
对象传递的。我也应该在
hlp
函数中传递
arguments
对象。这被我忽略了,并被一个用户引到了聚光灯下。顺便说一句,你告诉我我犯了很多错误。你能告诉我除了我在这里提到的那一点之外,我还有什么地方出错了吗?@Neel Up和一些更受赞赏的人约会。但我还没有深入研究ES6。而且我的观点是我错在哪里。这里有人让我明白我也应该在帮助中传递
参数
对象。是的,这是非常受赞赏的,复杂高效且干净的代码
function destroyer(arr) {
  function hlp(x) {
    for(var i=1; i<destroyer.arguments.length ; i++) {
      if(x == destroyer.arguments[i]) return false;
    }
    return true;
  }
  return arr.filter(hlp);
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));