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)