假设我有一个数组var arr = [1,2,3]
,如果我做var result = arr.filter(callback)
,我想通过使用过滤器将result
的值设为[2,4,6]
。我只想定义回调函数即可。使用地图可以轻松完成,但我只想使用过滤器。
答案 0 :(得分:0)
Array.prototype.filter
仅过滤数组中的现有值,基于过滤功能,有效地创建一个可以容纳相同值,其子集或空数组的新数组。
答案 1 :(得分:0)
您可以使用filter()
:
const arr = [1, 2, 3];
arr.filter((c, i) => {
arr[i] = +arr[i] * 2;
return true;
});
console.log(arr)
我们总是返回true
,因此filter()
在这种情况下毫无意义。
答案 2 :(得分:0)
正如许多次所说,没有理由应该这样做。
不可能像map那样做,因为map返回一个新数组。您可以更改原始数组,也可以克隆原始数组,以免更改它。
// this modifies the orginal array
var arr1 = [1,2,3]
arr1.filter((v,index,arr)=>{
arr[index] = v * 2;
return true
})
console.log(arr1)
// or you can clone it and do the same thing
// this modifies the cloned array
var arr2 = [1,2,3]
var arr3 = arr2.slice()
arr3.filter((v,index,arr)=>{
arr[index] = v * 2;
return true
})
console.log(arr2, arr3)
因此,不能,因为您必须修改原始数组或作弊并使用该数组的副本,所以无法使用过滤器重新创建地图。
答案 3 :(得分:-1)
所以我不确定我是否理解您的问题的第二部分,但是关于第一部分:
callback
的{{1}}具有三个参数,其中两个是可选的。
第一个参数是遍历中的当前元素,第二和第三个参数(可选参数)是当前元素的从0开始的索引,以及对原始数组的引用。
第三个参数对于您要尝试执行的操作很有用。
filter
这样一来,您甚至无需破坏函数范围就可以做到!
如果您要执行此操作而不必一定要具有一个变量来最初调用let myArr = [1, 2, 3];
myArr.filter((el, ind, orig) => {
orig[ind] = orig[ind] + 1; // Or, whatever map logic you want to use
return true; // since a Boolean condition must be returned here
});
(您必须传递一个数组),则可以使用原型和filter
方法:
call