Comprehensive object enumeration in JavaScript
This cool JS snippet implements enumerations for JS:
function makeEnum(idField, indexField) { idField = idField || 'id'; indexField = indexField || 'index'; var enumeration = []; // Standalone object is useful for Underscore collection method usage, // for example: // _.keys(MyEnum.dict); var dict = {}; enumeration.dict = dict; // This method can be used as a callback of map method: // var objects = ids.map(MyEnum.get); enumeration.get = function(id) { return enumeration[id]; }; // Registers a new enumeration item. enumeration.register = function(instance) { instance[indexField] = enumeration.length; enumeration[instance[idField]] = instance; dict[instance[idField]] = instance; enumeration.push(instance); return enumeration; }; // Maps enumeration as dictionary: // MyEnum.mapDict(function(value, key) { return ...; }); // // This is a shorthand for the next Underscore expression: // _.chain(MyEnum.dict).map(function(value, key) { // return [key, ...]; // }).object().value(); enumeration.mapDict = function(iteratee, context) { var result = {}; for (var id in dict) { if (dict.hasOwnProperty(id)) { result[id] = iteratee.call(context || this, dict[id], id, dict); } } return result; }; return enumeration; }
Hi Rajesh, We are glad that the article was useful for you.