Array.Filter不更新数组

时间:2017-01-23 09:04:10

标签: javascript arrays filter

任务是:

  

您将获得一个初始数组(该数组中的第一个参数)   驱逐舰功能),后跟一个或多个参数。移除所有   初始数组中与这些元素具有相同值的元素   参数。

在完成这项工作的过程中,我发现了一些我很难理解的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.filterArr.filter然后调用isItIn,检查当前检查的项目是否是我正在搜索的项目。但是,arr将保持不变。当我将isItIn更改为:

function isItIn(item, undefined, array){
  return item==1;
}

进行测试,它仍然保持不变,但console.log原文中的isItIn表明它正在接收正确的论据(或者我认为在至少

请注意,我已经通过另一条路线解决了这个问题,我没有找到问题的解决方案,只是解释了我的初始代码出错的地方。

2 个答案:

答案 0 :(得分:4)

基本上你使用Array#filter并省略了它的结果。

您需要将过滤器的结果分配给前一个数组。

arr = arr.filter(isItIn);

&#13;
&#13;
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;
&#13;
&#13;

答案 1 :(得分:0)

您必须分配返回的数组:

function destroyer(arr) {
    for (var i = 1; i<arguments.length; i++) {
        toDelete = arguments[i];
        arr = arr.filter(isItIn);
    }
    return arr;
 }