ECMAScript proposal for Deduplicating method of Array
npm install array-unique-proposalECMAScript proposal for Deduplicating method of Array.
!Proposal Stage-1
![CI & CD][1]
![NPM][2]
Deduplication is one of the most common requirements in Data processing, especially in large Web Apps nowadays.
In Lodash, uniq methods are also [very popular][3]:
| # | Name | Downloads |
| --- | -------- | --------- |
| 1 | uniq | 5,546,070 |
| 7 | uniqby | 447,858 |
| 28 | uniqwith | 15,077 |
But [...new Set(array)] in ECMAScript 6 isn't enough for Non-primitive values, and now, we may need a Array.prototype.uniqueBy().
While Array.prototype.uniqueBy() invoked with:
1. no parameter, it'll work as [...new Set(array)];
2. one index-key parameter (Number, String or Symbol), it'll get values from each array element with the key, and then deduplicates the origin array based on these _values_;
3. one function parameter, it'll call this function for each array element, and then deduplicates the origin array based on these _returned values_.
Notice:
- the Returned value is a new array, no mutation happens in the original array
- Empty/nullish items are treated as nullish values
- 0 & -0 are treated as the same
- All NaNs are treated as the same
``JavaScript
[1, 2, 3, 3, 2, 1].uniqueBy(); // [1, 2, 3]
const data = [
{ id: 1, uid: 10000 },
{ id: 2, uid: 10000 },
{ id: 3, uid: 10001 }
];
data.uniqueBy('uid');
// [
// { id: 1, uid: 10000 },
// { id: 3, uid: 10001 }
// ]
data.uniqueBy(({ id, uid }) => ${id}-${uid});``
// [
// { id: 1, uid: 10000 },
// { id: 2, uid: 10000 },
// { id: 3, uid: 10001 }
// ]
A polyfill is available in the [core-js][4] library. You can find it in the [ECMAScript proposals section][5].
A simple polyfill from the proposal repo write in TypeScript.
- Author: @TechQuery
- Champion: @Jack-Works
[1]: https://github.com/tc39/proposal-array-unique/actions/workflows/main.yml
[2]: https://nodei.co/npm/array-unique-proposal/
[3]: https://github.com/AndrewRot/lodash-function-usage/blob/9ec92a7980e321f8a32dd62e13addd6562ba4612/README.md
[4]: https://github.com/zloirock/core-js
[5]: https://github.com/zloirock/core-js#array-deduplication