Javascript 对filter()函数感到困惑,我需要一个深入的解释

Javascript 对filter()函数感到困惑,我需要一个深入的解释,javascript,arrays,oop,data-structures,filter,Javascript,Arrays,Oop,Data Structures,Filter,我刚刚开始学习java脚本,而过滤器函数的概念让我感到困惑 a.filter(function(item, pos) { return a.indexOf(item) == pos; }) 上面是一个代码片段,其中filter函数显示一个没有重复的数组,让我们假设a是一个有许多重复数字的数组 我100%不明白代码块中发生了什么。我知道filter函数返回一个布尔值,但在这个等式中item是什么意思?pos是什么意思?如果filter函数返回一个布尔值,那么为什么这个等式返回一个不重复的

我刚刚开始学习java脚本,而过滤器函数的概念让我感到困惑

a.filter(function(item, pos) {
    return a.indexOf(item) == pos;
})
上面是一个代码片段,其中filter函数显示一个没有重复的数组,让我们假设a是一个有许多重复数字的数组

我100%不明白代码块中发生了什么。我知道filter函数返回一个布尔值,但在这个等式中item是什么意思?pos是什么意思?如果filter函数返回一个布尔值,那么为什么这个等式返回一个不重复的数字数组

过滤器不返回布尔值,它返回一个包含原始数组元素的数组。它通过调用在数组的每个元素上提供的函数来决定要在结果中包含哪些元素。此函数返回一个布尔值:如果它是真的,则该元素包含在结果中。函数的参数是函数中名为item的元素及其在名为pos的数组中的位置

此函数使用indexOf查找数组中第一个元素的位置,该元素的值与给定的元素的值相同。如果该位置与给定的位置相同,则该元素必须是该值在数组中的第一个匹配项,因此它返回true,并且该元素将包含在结果中。如果位置不同,则该元素必须是以后的副本,因此它返回false,并且该元素不包含在结果中。最终的结果是过滤结果中只包含每个值的第一个副本,这意味着它们都是唯一的

例如,假设数组为:

["a", "b", "a", "c"]
在第一次迭代中,item=a,pos=0。a、 indexOfitem返回0,函数返回0==0,这是真的,因此结果中包含项

在第二次迭代中,item=b,pos=1。a、 indexOfitem返回1,函数返回1==1,这是真的,所以结果中包含项

在第三次迭代中,item==a,pos=2。a、 indexOfitem返回0,函数返回0==2,这是false,因此结果中不包括项

在第四次迭代中,项目=c,位置=3。a、 indexOfitem返回3,函数返回3==3,这是真的,所以结果中包含项


最终结果是,第一次、第二次和第四次迭代的项目包含在结果中,即[a、b、c]。

过滤器“回调”参数返回一个“布尔值”;filter函数返回过滤后的数组。

是否阅读了filter函数的文档?它解释了回调函数的参数是什么。过滤器不返回布尔值,它返回一个过滤数组。如果回调返回true,则结果中包含项,如果返回false,则不包含项。在本例中,谓词为-项pos的当前索引是否与数组中项的索引相同。如果不是,则该项目是重复的,我们将被过滤掉。读一读关于。这是否意味着pos作为索引对应于数组中的每个元素?假设数组位于[1,2,1,3],我使用与上面所示相同的函数语法过滤数组。这是否意味着对于第一次迭代,传递的参数将是function1,0?当迭代再次进行时,它将是函数2,1。2表示元素,1表示索引。但是第三次迭代不是函数1,2吗?我只需要把它分解得尽可能简单。我已经添加了一个4次迭代的完整示例。感谢您的深入解释!先生,您是一位学者和绅士!