gentooboontoo / js-quantities

JavaScript library for quantity calculation and unit conversion
http://gentooboontoo.github.io/js-quantities/
MIT License
396 stars 102 forks source link

Add getUnits and getAliases addresses #48 #53

Closed lukelaws closed 8 years ago

lukelaws commented 8 years ago

This is one solution to the issue. In #14 @rage-shadowman had mentioned "Another alternative, if you don't want ambiguous arrays, would be to return only the unit names (ie: for "" return "liter" -- the name sans the "<>" chars) and a getAliases method to get all the aliases for a named unit (["l", "L", "liter", "liters", "litre", "litres"]) or maybe event all the alternative aliases for a given alias (such that getAlternatives("liter") returns an identical array to getAlternatives("L"))."

I agree the grouped arrays are ambiguous, so I'm using that approach:

Qty.getUnits('currency'); // => [ 'dollar', 'cents' ]
Qty.getAliases('m'); // => [ 'm', 'meter', 'meters', 'metre', 'metres' ]

So only one name for each unit is returned. Also:

Qty.getUnits(); // => [ 'acre','Ah','ampere','AMU','angstrom', ...]

So getUnits is sorted to make it perfect for feeding choices to the user. (Select box, predictive input)

@gentooboontoo also mentioned the getAliases method and again i agree, these should be separate functions. If this goes over well I can make a separate commit for the getPrefixes but I think there are quite a few versions of that that looked great already. They just are bundled up with these other changes.

Thanks for js-quantities! It's working out for us.

gentooboontoo commented 8 years ago

Great, thank you for the PR. I think it is the right API.

As a side note, I would have preferred to keep the units identifiers hidden and encapsulated but since I have not found a way to avoid it, this PR is the good opportunity to include this feature.