繁体   English   中英

Array.Filter不更新数组

[英]Array.Filter not updating array

任务是:

您将获得一个初始数组(destroyer函数中的第一个参数),后跟一个或多个参数。 从初始数组中删除与这些参数具有相同值的所有元素。

在研究过程中,我发现有些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 S IN的原始书面isItIn显示它被正确接收的参数(或者只要我认为至少确定。

请注意,我已经通过另一途径解决了该问题,我不是在寻找解决问题的方法,而只是解释我的初始代码出了什么问题。

基本上,您使用Array#filter并忽略其结果。

您需要将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)); 

您必须分配返回的数组:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM