Reveals an object's true name.

npm install rumplestiltskin
4 downloads in the last day
26 downloads in the last week
92 downloads in the last month

Build Status


Reveals an object's true name.

Have you ever wanted to use an object as a key? If you know an object's true name you can.

You're probably thinking, "Oh great, an object hashing function." But that's not what this does. Rumplestiltskin gives you a consistent string representation for an object so you can use it as a key in a map.


var trueName = require('rumplestiltskin').trueName;

var myMap = {};

function addToMap(key, val) {
    myMap[trueName(key)] = val;

function getFromMap(key) {
    return myMap[trueName(key)];

addToMap({ a: 1, b: '1' }, 'hello');
addToMap({ a: '1', b: 1 }, 'world');

console.log(getFromMap({ b: '1', a: 1 }));
console.log(getFromMap({ b: 1, a: '1' }));

True names are not cheap. The larger, more complicated an object is, the higher the cost. When you want to know if two objects are equal, use a deepEqual function do not compare their true names.

If you want a hash for objects, just feed true names into a hash function.


As a bonus, Rumplestiltskin can also accept a salt to prepend to the true name this can come in handy if you want to differentiate between identical objects.

To see a salt in action try using emaNeurt:

var emaNeurt = require('rumplestiltskin').emaNeurt;

console.log(emaNeurt({ hello: 'world' }));

Which basically does this: trueName(o, '\u202e');

npm loves you