Skip to content

A group of polyfills aimed to make working with maps in a more functional way easier.

Notifications You must be signed in to change notification settings

tylerthehaas/mapda

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mapda v2.0.0

Installation

Using npm:

$ npm install --save mapda

Motivation

Historically JavaScript has only had objects but no dictionaries or maps. This has resulted in objects doing the heavy lifting for both the data structure to store data as well as for dictionaries. There are a few problems with this detailed by Dr. Axel Rauschmayer in this blogpost. As of ES2015 we now have Maps to address some of these issues. The major problem with Maps as they were implemented was that they are difficult to work with JSON data and they do not have nearly enough methods to make it worth the trouble. This package alleviates those problems by having a method to convert to and from json and JavaScript Objects as well as providing map, filter and reduce functions. For more behind the motivation of this package and why you should use it see the blogpost I wrote on the overuse of Objects.

Usage

jsonToMap

converts valid json to a new Map

const json = JSON.stringify({a: 'maps', b: 'are', c: 'awesome!'});
jsonToMap(json); // Map(3) {"a" => "maps", "b" => "are", "c" => "awesome!"}

mapToJson

converts a Map containing keys that are strings to valid json

mapToJson(new Map([['a', 'maps'], ['b', 'are'], ['c', 'awesome!']])); // '{"a": "maps", "b": "are", "c": "awesome!"}'

mapToObject

converts a Map containing keys that are strings to an object

mapToObject(new Map([['a', 'maps'], ['b', 'are'], ['c', 'awesome!']])); // {a: 'maps', b: 'are', c: 'awesome!'}

objectToMap

converts an object to a Map.

objectToMap({a: 'maps', b: 'are', c: 'awesome!'}); // Map(3) {"a" => "maps", "b" => "are", "c" => "awesome!"}

map

Takes a callback function and a Map and returns a new Map. Follows same pattern as JavaScript's Array.prototype.map method.

Callback arguments

  • value - the value in the Map's key/value pair
  • key - the key in the Map's key/value pair
const myMap = new Map([['a', 'maps'], ['b', 'are'], ['c', 'awesome!']]);

map((value, key) => {
  return value = 'hi';
}, myMap) // Map(3) {"a" => "hi", "b" => "hi", "c" => "hi"}

filter

Takes a predicate function and a Map and returns a new Map containing the key/value pairs that pass the predicate function. Follows the same pattern as JavaScript's Array.prototype.filter method.

Predicate arguments:

  • value - the value in the Map's key/value pair
  • key - the key in the Map's key/value pair
const myMap = new Map([['a', 'maps'], ['b', 'are'], ['c', 'awesome!']]);

filter((value, key) => {
  return key === 'b'
}, myMap) // Map(1) {"b" => "hi"}

reduce

Takes a callback function, an initial value and a Map and returns an accumulator. Follows the same pattern as JavaScript's Array.prototype.reduce method.

Callback arguments:

  • accumulator - value to be built up as the Map's key/value pairs are iterated over.
  • value - the value in the Map's key/value pair
  • key - the key in the Map's key/value pair
const myMap = new Map([ [ 'foo', 5 ], [ 'bar', 3 ], [ 'baz', 10 ] ]);

reduce((a, v) => (a += v), 5, myMap); // 23

About

A group of polyfills aimed to make working with maps in a more functional way easier.

Resources

Stars

Watchers

Forks

Packages

No packages published