const removeDuplicates = arr => [...new Set(arr)];
Assumes that the given argument is an Array and removes duplicate entries, keep in mind that it works only for entries with primitive values (string, number, bigint, boolean, undefined, symbol, and null). Preserves the order of the entries and returns a copy of the array.
The repository & npm package
You can find the all the utility functions from this series at github.com/martinkr/onelinecode
The library is also published to npm as @onelinecode for your convenience.
The code and the npm package will be updated every time I publish a new article.
Follow me on Twitter: @martinkr and consider to buy me a coffee
Photo by zoo_monkey on Unsplash
Top comments (10)
Worth explaining this separately when used with array instead of sets
And modifying x and y won't affect the other.
Then bringing in set
And the the original post does that in one line in a function
Also worth adding that you might want to stop once you have a set and not convert it back to an array.
Why?
Lookup time from a set is constant to check if a value is in a set while in an array of 1000 elements worst case you have to go through 1000 elements until you find the one at the end.
Secondly when you convert from array to set, the order will be lost. Sets are inherently unordered. So when you convert from set to array you will not get the order of the original array. So you might as well keep the set.
It's actually specced to preserve insertion order: developer.mozilla.org/en-US/docs/W...
(
...
spread operator callsy[Symbol.iterator]
, which is specced to be the same as what is returned by.values()
onSet
)Oh interesting, in Python it is unordered.
Thank you for the explanation.
I think they mean it won't behave as expected if the array contains similar objects that have different references
It might be helpful to clarify that dedupe will remove duplicate bindings but not similar objects with a different binding
I think it worth saying that it works only on primitives
Thank you for your contribution. I'll add it to the description.
I just learned of an alternative for set to array
And if you want to iterate over a set without converting to an array.
developer.mozilla.org/en-US/docs/W...
Array.from
goes through iterator protocol forSet
andMap
, so it's exactly equivalent to the[...
sugar.