TO DO - Uize.Array.Dupes
This is a TO DO document for the Uize.Array.Dupes
module.
1. Proposed New Methods
1.1. Uize.Array.Dupes.getDupes
Returns an array of dupe info objects.
1.2. Uize.Array.Dupes.getValueCount
Returns the number of occurrences of the specified value.
1.3. Uize.Array.Dupes.getValueCounts
Returns a lookup array of counts per value.
2. Support Loose Type Comparison
For the Uize.Array.Dupes.dedupe
method, support canonicalizers that can achieve the effect of loose type comparison.
2.1. Canonicalize Primitive Type Values to Strings
One approach for a simple canonicalizer to perform loose type deduping would be to canonicalize primitive type values to strings, and map both null and undefined to a nully value object stand-in object...
var nullyValueStandin = {}; function (value) { return ( Uize.isPrimitive (value) ? value + '' : Uize.isNully (value) ? nullyValueStandin : value ); }
2.2. Equivalent Canonical Values
An alternative approach would allow a canonicalizer to return multiple equivalent canonical values...
when the canonicalizer sees a number value, it would return the number value, the string serialization of the number, and the boolean equivalent of the number | |
when the canonicalizer sees a boolean value, it would return the number equivalent of the boolean, and the string serialization of the boolean | |
when the canonicalizer sees the value null, it would return the value null, the value 0, and the value undefined |
Problems with this approach are...
canonicalizers should be able to return array values, so how would a canonicalizer that is to return multiple values differentiate that intent from simply returning an array as a canonicalized result? Perhaps the canonicalizer would have to have a property on it to indicate that it uses this signature, so that the return value would not have to be overloaded. | |
if a canonicalizer could return multiple values, code that currently does the lookup and the insert would have to be wrapped in a loop to do multiple lookups and multiple inserts |