I'm struggling with the following piece of code that filters an array with repeated items but keeps the non-repeated items.
temp = temp.filter((a, _, aa) => aa.indexOf(a) === aa.lastIndexOf(a));
What I been seeing in the docs is that Array.prototype.filter takes a callback function with an element, an index and an array.
What I don't understand is the arguments that are being passed: (a, _, aa). Is _ used as a placeholder or does it represent something else?
The underscore in the argument list is just passed as a placeholder. It's commonly used to signal an argument that's thrown away and never used but needs to be there as a placeholder. Essentially a "dummy" variable.1
In this case, Array.prototype.filter takes in a callback with three arguments. Since the author of the code wants access to the array which filter is being called on but doesn't care about the index, they must supply a second argument nonetheless to use the third, array argument. Note that _ is just like any other variable, and you can still do whatever you do to a variable with it. It's just been commonly used as a throwaway variable.
If you wanted an explanation of the code, it just iterates through the array and checks the current element's index. The callback returns true if a (the current element being processed)'s index in aa (the array filter is being called on) is the last index the element appears. If it is, that means the element occurs nowhere else in the array, and thus filters out duplicate elements.
By "commonly used" I mean that many languages adopt this practice. In languages such as Python, it's a well-known standard. Other languages such as SQL, Haskell, and Scala use this to (although Haskell as a pattern).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With