Javascript 为什么我不能使用循环过滤出元素?
我试图过滤掉arr中与输入参数相等的元素。我想知道为什么这行不通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
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(i log(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;
}