Javascript 为什么我不能使用循环过滤出元素?

Javascript 为什么我不能使用循环过滤出元素?,javascript,Javascript,我试图过滤掉arr中与输入参数相等的元素。我想知道为什么这行不通 function destroyer(arr) { // Remove all the values var newarr = arr.slice(); var i = 1; while (i < arguments.length){ newarr = newarr.filter(function(num){ if (num == arguments[i]){ return (false); } ret

我试图过滤掉arr中与输入参数相等的元素。我想知道为什么这行不通

function destroyer(arr) {
// Remove all the values
var newarr = arr.slice();
var i = 1;
while (i < arguments.length){
 newarr = newarr.filter(function(num){
  if (num == arguments[i]){
    return (false);
  }
  return (true);
  });
  i++;
}
 return newarr;
}
功能销毁程序(arr){
//删除所有值
var newarr=arr.slice();
var i=1;
while(i
驱逐舰([3,5,1,2,2],2,3,5)

应该返回[1]

我解决问题的方法是使用splice():

功能销毁程序(arr){
var i=1;
while(i
您可以用更简单的方法来完成

函数销毁程序(){
设args=Array.from(arguments);//从参数创建新数组
args.shift();//从参数中删除第一个元素
返回参数[0]。筛选器(项=>!args.includes(项));//执行筛选器
}

日志(销毁程序([3,5,1,2,2],2,3,5));//[1]
您不使用的具体原因是什么

例如:

const元素=[1,2,3,4,5,6];
常量filterInput=inputs=>element=>!投入。包括(要素);
常量filteredElements=elements.filter(filterInput([1,5,6]);

控制台日志(过滤器删除)此问题的根本原因是:在以下代码中:

 newarr = newarr.filter(function(num){
  if (num == arguments[i]){
    return (false);
   }
   return (true);
 });
参数
不是您所期望的<代码>参数
这里指的是
函数(num){…
的参数,而不是
销毁程序(arr)
的参数

要解决此问题,您可以在
newarr.filter
之前检索感兴趣的号码:

功能销毁程序(arr){
//删除所有值
var newarr=arr.slice();
var i=1;
while(ilog(destroyer([3,5,1,2,2],2,3,5));
这是因为您在另一个函数中使用了
参数
变量

if(num==arguments[i]){
arguments变量是第二个函数的actullay arguments列表

function(num){
  if (num == arguments[i]){
    return (false);
  }
  return (true);
}
要解决此问题,请尝试以下操作:

 function destroyer(arr) {
  var i = 1,
  args = arguments;
  while (i < arguments.length){
    var j = 0;
    while (j < arr.length){
      if (arr[j] == args[i]){
        arr.splice(j,1);
        j = j;
      }
      else
        j++;
    }
    i++;
  }
  return arr;
}
功能销毁程序(arr){
var i=1,
args=参数;
while(i
ahhh我明白了。这很有道理。非常感谢。
 function destroyer(arr) {
  var i = 1,
  args = arguments;
  while (i < arguments.length){
    var j = 0;
    while (j < arr.length){
      if (arr[j] == args[i]){
        arr.splice(j,1);
        j = j;
      }
      else
        j++;
    }
    i++;
  }
  return arr;
}