Skip to content Skip to sidebar Skip to footer

Using Javascript Object As Object Key

I am trying to devise a way to use a simple Javascript object (one level deep key value pairs) as a key to another object. I am aware that merely using the object without stringif

Solution 1:

In ECMAScript 6 you'll be able to use Maps.

var map = new Map();

var keyObj = { a: "b" },
    keyFunc = function(){},
    keyString = "foobar";

// setting the values
map.set(keyObj,    "value associated with keyObj");
map.set(keyFunc,   "value associated with keyFunc");
map.set(keyString, "value associated with 'foobar'");

console.log(map.size);              // 3

// getting the values
console.log(map.get(keyObj));       // "value associated with keyObj"
console.log(map.get(keyFunc));      // "value associated with keyFunc"
console.log(map.get(keyString));    // "value associated with 'a string'"

console.log(map.get({ a: "b" }));   // undefined, because keyObj !== { a: "b" }
console.log(map.get(function(){})); // undefined, because keyFunc !== function(){}
console.log(map.get("foobar"));     // "value associated with 'foobar'"
                                    // because keyString === 'foobar'

Solution 2:

I wrote a hash table implementation that accepts arbitrary keys but I suspect you'll reject it on the grounds of the relatively large file size.

https://code.google.com/p/jshashtable/


Solution 3:

Here is an underscore based solution that relies on first converting the object to key-value pairs.

var myObj = { name: 'john', state: 'ny', age: 12};
var objPairs = _.pairs(myObj);

var sortedPairs = _.reduce(_.keys(myObj).sort(), function(sortedPairs, key) {
    var pair = _.find(objPairs, function(kvPair) {return kvPair[0] == key});
    sortedPairs.push(pair);
    return sortedPairs;
}, []);

console.log(JSON.stringify(sortedPairs)); //stringifying makes suitable as object key
// [["age",12],["name","john"],["state","ny"]]

Solution 4:

You could use a pattern like this. This way, your key for an object is this random id that you generate for every object.

var MyObject = function(name) {
    this.name = name;
    this.id = Math.random().toString(36).slice(2);
}

MyObject.prototype.toString = function() {
    return this.id;
}

Post a Comment for "Using Javascript Object As Object Key"