_这个过滤器回调中的含义是什么?

Ren*_*cia 3 javascript arrays

我正在努力使用以下代码来过滤具有重复项目的数组但保留非重复项目.

temp = temp.filter((a, _, aa) => aa.indexOf(a) === aa.lastIndexOf(a));
Run Code Online (Sandbox Code Playgroud)

我在文档中看到的是Array.prototype.filter带有元素,索引和数组的回调函数.

我不明白的是正在传递的论据:(a, _, aa).被_用作占位符,或者它代表别的东西吗?

Li3*_*357 6

参数列表中的下划线仅作为占位符传递.它通常用于表示抛弃的参数,从未使用但需要作为占位符存在.本质上是一个"虚拟"变量.1

在这种情况下,Array.prototype.filter接受带有三个参数的回调.由于代码的作者想要访问filter被调用但不关心索引的数组,因此他们必须提供第二个参数来使用第三个数组参数.请注意,_就像任何其他变量一样,您仍然可以使用它对变量执行任何操作.它通常被用作一次性变量.

如果你想要解释代码,它只是迭代数组并检查当前元素的索引.如果a(正在处理的当前元素)的索引aa(filter正在调用数组)是元素出现的最后一个索引,则回调返回true .如果是,则表示该元素在阵列中的其他位置出现,因此过滤掉重复的元素.


"常用"是指许多语言采用这种做法.在Python等语言中,它是一个众所周知的标准.其他语言(如SQL,Haskell和Scala)使用此方法(尽管Haskell是一种模式).