1unitedpower: (pseudo-)assoziative arrays in javascript: naming collisions mit methoden

Beitrag lesen

const some_object = new Map();
some_object.set('init', true);
const key = 'constructor';
if(some_object.get(key)){
  destroy_earth();
}

das sieht sauberer aus.

Alternativ, könnte man auch eine Funktion als Map benutzen:

const map = key => (
 (key === 'foo') ? 42 :
 (key === 'bar') ? 43 : undefined
)

console.assert(map('foo') === 42)
console.assert(map('bar') === 43)
console.assert(map('test') === undefined)

Solche funktionalen Maps kann man sich auch dynamisch zusammenbauen:

function empty(key) {
  return undefined;
}

function set(key, value, map) {
  return lookup => (key === lookup) ? value : map(lookup);
}

const map = set('foo', 42, set('bar', 43, empty))
console.assert(map('foo') === 42)
console.assert(map('bar') === 43)
console.assert(map('test') === undefined)

Ist aber syntaktisch leider nicht so schön und Lesezugriffe brauchen lineare Laufzeit.