JSFiddle - React, Tailwind, and code Playground

by Jeremy Banks

CoffeeScript

# Using the built-in iteration order behaviour to implement
# an OrderedDict.

class OrderedDict
    # assumes iteration-clean Object.prototype
    
    keyPrefixChar: '_'  # must be a single character
    
    constructor: (pairs=undefined) ->
        @_mapping = new Object
        if pairs?
            for [key, value] in pairs
                @setItem key, value
        @
    
    getItem: (key) ->
        return @_mapping[@keyPrefixChar + key]
    
    setItem: (key, value) ->
        @_mapping[@keyPrefixChar + key] = value
        value
    
    forEach: (callback, thisArg=undefined) ->
        for key, value of @_mapping
            callback value, key[1...], thisArg
        @
     
     toString: ->
        pairStrs = []
        @forEach (value, key) ->
            pairStrs.push "[#{key}, #{value}]"
            @
        return "OrderedDict([#{pairStrs.join(', ')}])"

d = new OrderedDict
d.setItem 'A', "Aye"
d.setItem 3, "Three"
d.setItem 2, "Two"
d.setItem 'B', "Bhe"
d.setItem 1, "One"
d.setItem 3, "III"
d.setItem 'C', "See"

console.log String(d)