@elenakay/listmap

0.0.0-prealpha • Public • Published

ListMap: Javascript Object With Ordered Keys

Even though an object's keys are (mostly) enumerable in Javascript, there is no guaranteed order on this enumeration; consider the following snippet:

var obj = {};

obj['a'] = 1;
obj['b'] = 2;

for (var objectKey in obj) {
  if (obj.hasOwnProperty(objectKey) {
    console.log(objectKey);
  }
}

even though a was set first, the snippet above may still produce the sequence b a, i.e., there is not guarantee that it would always print a b.

But what if we want to keep track of the order in which an object's keys were set? this is where ListMap comes in handy:

Installation

npm install listmap

Usage

var listmap = require('listmap');

var lm = new listmap.ListMap();

lm.set('a', 1);
lm.set('b', 2);
lm.set('c', 12);
lm.set('d', 40);
lm.set('e', 55);

console.log('length:', lm.length);

// traverse listmap in reverse
while (lm.length > 0) {
  var i = lm.length - 1;

  var k = lm.keyAt(i);
  console.log('key at ['+i+'] is:', k);

  var v = lm.valueAt(i);
  console.log('value at ['+i+'] is:', v);

  var kIndex = lm.locateKey(k);
  console.log('key with name ['+k+'] is located at index:', kIndex);

  lm.deleteKey(k);
  console.log('deleted key name ['+k+']; listmap.length:', lm.length);

  kIndex = lm.locateKey(k);
  if (kIndex !== -1) // never happens, since entry `k: v` has just been deleted
    throw new Error('deleted key, but located it in the key list!');

  // re-insert (k,v) into the listmap
  lm.set(k, v);

  console.log('re-inserted ['+k+': '+v+']; list.length:', lm.length);

  var valueByKey = lm.get(k);
  console.log('value at key name [' + k +'] is:', v);

  kIndex = lm.locateKey(k);
  if (kIndex === -1) // never happens, since we have just inserted `k: v`
    throw new Error('key-value was just inserted into the listmap, but it was '+
      'not anywhere in the key list!');

  lm.removeIndex(kIndex);
  console.log('removed index at ['+kIndex+']; listmap.length:', (lm).length);

  console.log('--------------------\n');
}

Package Sidebar

Install

npm i @elenakay/listmap

Weekly Downloads

1

Version

0.0.0-prealpha

License

MIT

Unpacked Size

5.39 kB

Total Files

4

Last publish

Collaborators

  • elenakay