Alpine: Unnecessary implementation

Created on 20 Feb 2020  路  6Comments  路  Source: alpinejs/alpine

https://github.com/alpinejs/alpine/blob/f550d081e774841a8f97a496d3586bc2f57ec760/src/utils.js#L14-L24

Are there any valuable reasons for this?

To obtain only unique values for a given array arr you can just do arr = Array.from(new Set(arr)).

Supported by all major browsers + IE11

cheers
flash :zap:

Most helpful comment

The solution using Set should be faster, too.

Benchmark: https://perf.link/#Y29uc3QgdGVzdDEgPSBbLi4uQXJyYXkoMTAwMCkua2V5cygpXTsgLy9ObyBkdXBsaWNhdGVzCmNvbnN0IHRlc3QyID0gWy4uLkFycmF5KDEwMDApLmtleXMoKSwgOTk5LCA3LCA1MF07IC8vIENvbnRhaW5pbmcgZHVwbGljYXRlcw==/W3siY29kZSI6ImZ1bmN0aW9uIGFycmF5VW5pcXVlKGFycmF5KSB7IFxuICAgdmFyIGEgPSBhcnJheS5jb25jYXQoKTtcbiAgIGZvcih2YXIgaT0wOyBpPGEubGVuZ3RoOyArK2kpIHsgXG4gICAgICAgZm9yKHZhciBqPWkrMTsgajxhLmxlbmd0aDsgKytqKSB7IFxuICAgICAgICAgICBpZihhW2ldID09PSBhW2pdKSBcbiAgICAgICAgICAgICAgIGEuc3BsaWNlKGotLSwgMSk7IFxuICAgICAgIH0gXG4gICB9IFxuICBcbiAgIHJldHVybiBhOyBcbn1cbmNvbnN0IHJlc3VsdDEgPSBhcnJheVVuaXF1ZSh0ZXN0MSk7XG5jb25zdCByZXN1bHQyID0gYXJyYXlVbmlxdWUodGVzdDIpOyIsImVycm9yIjpmYWxzZSwibWVkaWFuIjoyLjA4NTAwMDA0MzczNDkwOH0seyJjb2RlIjoiZnVuY3Rpb24gYXJyYXlVbmlxdWUoYXJyYXkpIHsgXG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgYXJyYXkuZm9yRWFjaCh2ID0+IHNldC5hZGQodikpO1xuICByZXR1cm4gQXJyYXkuZnJvbShzZXQpO1xufVxuY29uc3QgcmVzdWx0MSA9IGFycmF5VW5pcXVlKHRlc3QxKTtcbmNvbnN0IHJlc3VsdDIgPSBhcnJheVVuaXF1ZSh0ZXN0Mik7IiwiZXJyb3IiOmZhbHNlLCJtZWRpYW4iOjAuMDg1MDAwMTgxNTcwNjQ5MTV9LHsiY29kZSI6IiIsImVycm9yIjpmYWxzZSwibWVkaWFuIjowfV0=

All 6 comments

Looks to me like new Set(iterable) is _not_ supported by IE11 (unfortunately!):

image

Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set/Set#Browser_compatibility

Ouh. But still
const set = new Set(); arr.forEach(v => set.add(v)); return Array.from(set);

The solution using Set should be faster, too.

Benchmark: https://perf.link/#Y29uc3QgdGVzdDEgPSBbLi4uQXJyYXkoMTAwMCkua2V5cygpXTsgLy9ObyBkdXBsaWNhdGVzCmNvbnN0IHRlc3QyID0gWy4uLkFycmF5KDEwMDApLmtleXMoKSwgOTk5LCA3LCA1MF07IC8vIENvbnRhaW5pbmcgZHVwbGljYXRlcw==/W3siY29kZSI6ImZ1bmN0aW9uIGFycmF5VW5pcXVlKGFycmF5KSB7IFxuICAgdmFyIGEgPSBhcnJheS5jb25jYXQoKTtcbiAgIGZvcih2YXIgaT0wOyBpPGEubGVuZ3RoOyArK2kpIHsgXG4gICAgICAgZm9yKHZhciBqPWkrMTsgajxhLmxlbmd0aDsgKytqKSB7IFxuICAgICAgICAgICBpZihhW2ldID09PSBhW2pdKSBcbiAgICAgICAgICAgICAgIGEuc3BsaWNlKGotLSwgMSk7IFxuICAgICAgIH0gXG4gICB9IFxuICBcbiAgIHJldHVybiBhOyBcbn1cbmNvbnN0IHJlc3VsdDEgPSBhcnJheVVuaXF1ZSh0ZXN0MSk7XG5jb25zdCByZXN1bHQyID0gYXJyYXlVbmlxdWUodGVzdDIpOyIsImVycm9yIjpmYWxzZSwibWVkaWFuIjoyLjA4NTAwMDA0MzczNDkwOH0seyJjb2RlIjoiZnVuY3Rpb24gYXJyYXlVbmlxdWUoYXJyYXkpIHsgXG4gIGNvbnN0IHNldCA9IG5ldyBTZXQoKTtcbiAgYXJyYXkuZm9yRWFjaCh2ID0+IHNldC5hZGQodikpO1xuICByZXR1cm4gQXJyYXkuZnJvbShzZXQpO1xufVxuY29uc3QgcmVzdWx0MSA9IGFycmF5VW5pcXVlKHRlc3QxKTtcbmNvbnN0IHJlc3VsdDIgPSBhcnJheVVuaXF1ZSh0ZXN0Mik7IiwiZXJyb3IiOmZhbHNlLCJtZWRpYW4iOjAuMDg1MDAwMTgxNTcwNjQ5MTV9LHsiY29kZSI6IiIsImVycm9yIjpmYWxzZSwibWVkaWFuIjowfV0=

You might take a decision about compatibility for IE11. More Detail here

cheers
flash :zap:

Maybe we can support this for just none IE Alpine. And leave the IE version with the current implementation. Because new Set() is fast :1st_place_medal: :grin:

Hi guys, going to close this issue since the arrayUnique function has been updated and was included in the 2.3.0 release. For those curious, the separate IE11 build includes a Set polyfill so that all the functionality is present. Thanks! :)

Was this page helpful?
0 / 5 - 0 ratings

Related issues

mikemartin picture mikemartin  路  3Comments

allmarkedup picture allmarkedup  路  4Comments

haipham picture haipham  路  4Comments

adevade picture adevade  路  3Comments

dkuku picture dkuku  路  5Comments