任务是:
您将获得一个初始数组(该数组中的第一个参数) 驱逐舰功能),后跟一个或多个参数。移除所有 初始数组中与这些元素具有相同值的元素 参数。
在完成这项工作的过程中,我发现了一些我很难理解的Array.filter行为:
function destroyer(arr) {
for (var i = 1; i<arguments.length; i++){
toDelete = arguments[i];
arr.filter(isItIn);
}
return arr;
}
function isItIn(item, undefined, array){
return item!=toDelete;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
我的意图是遍历参数的第1项,每次都调用arr.filter
。 Arr.filter
然后调用isItIn
,检查当前检查的项目是否是我正在搜索的项目。但是,arr
将保持不变。当我将isItIn
更改为:
function isItIn(item, undefined, array){
return item==1;
}
进行测试,它仍然保持不变,但console.log
原文中的isItIn
表明它正在接收正确的论据(或者我认为在至少
请注意,我已经通过另一条路线解决了这个问题,我没有找到问题的解决方案,只是解释了我的初始代码出错的地方。
答案 0 :(得分:4)
基本上你使用Array#filter
并省略了它的结果。
您需要将过滤器的结果分配给前一个数组。
arr = arr.filter(isItIn);
function destroyer(arr) {
for (var i = 1; i < arguments.length; i++) {
toDelete = arguments[i];
arr = arr.filter(isItIn);
}
return arr;
}
function isItIn(item) {
return item != toDelete;
}
console.log(destroyer([1, 2, 3, 1, 2, 3], 2, 3));
&#13;
答案 1 :(得分:0)
您必须分配返回的数组:
function destroyer(arr) {
for (var i = 1; i<arguments.length; i++) {
toDelete = arguments[i];
arr = arr.filter(isItIn);
}
return arr;
}