[英]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.