所以我有这个代码,它做了它需要做的事情,它返回一个输入数组减去与数组后面的参数匹配的任何值。但是,我无法弄清楚如何遍历所有参数。这是我的工作 -
function destroyer(arr) {
var arg2 = arguments[1];
var arg3 = arguments[2];
var arg4 = arguments[3];
var result = arr.filter(function(arg) {
if (arg != arg2 && arg != arg3 && arg != arg4) {
return (arg);
}
});
return result;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
这是我尝试使用for循环迭代所有参数。它无法正常工作,我正在努力构思我在arr.filter中回调我的回调 -
function destroyer(arr) {
var result = arr.filter(function(arg) {
for (var i = 1; i < arguments.length; i++) {
if (arg != arguments[i]) {
return (arg);
}
}
});
return result;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
这是否接近我需要的地方或离开这里?
答案 0 :(得分:1)
在每个函数调用上设置arguments
变量,包括对.filter()
回调的调用。因此,回调中的arguments
不是您认为的那样。
您可以执行.indexOf
尝试执行的操作,并且您需要将他们的参数复制到另一个数组中:
function destroyer(arr) {
var badValues = [];
for (var i = 1; i < arguments.length; ++i)
badValues = arguments[i];
return arr.filter(function(value) {
return badValues.indexOf(value) < 0;
});
}
使用.slice()
复制全部或部分arguments
对象很受欢迎:
var badValues = [].slice.call(arguments, 1);
如果您喜欢简洁,可以这样做,但是将arguments
对象从函数中传递出来会使优化非常困难。