flatMap - nodef/extra-map GitHub Wiki

Flatten nested map, based on map function.

Alternatives: flat, flatMap.

function flatMap(x, fm, ft)
// x:  a nested map
// fm: map function (v, k, x)
// ft: test function for flatten (v, k, x) [is]
const map = require('extra-map');

var x = new Map([
  ['ab', new Map([
    ['a', 1],
    ['b', 2]
  ])],
  ['cde', new Map([
    ['c', 3],
    ['de', new Map([
      ['d', 4],
      ['e', new Map([
        ['e', 5]
      ])]
    ])]
  ])]
]);
map.flatMap(x);
// → Map(4) {
// →   'a' => 1,
// →   'b' => 2,
// →   'c' => 3,
// →   'de' => Map(2) { 'd' => 4, 'e' => Map(1) { 'e' => 5 } }
// → }

map.flatMap(x, v => map.flat(v, 1));
// → Map(5) {
// →   'a' => 1,
// →   'b' => 2,
// →   'c' => 3,
// →   'd' => 4,
// →   'e' => Map(1) { 'e' => 5 }
// → }

map.flatMap(x, v => map.flat(v));
// → Map(5) { 'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5 }

References