Javascript: using tuples as dictionary keys

You could use my jshashtable and then use any object as a key, though assuming your tuples are arrays of integers I think your best bet is one you've mentioned yourself: use the join() method of Array to create property names of a regular object. You could wrap this very simply:

function TupleDictionary() {
 this.dict = {};
}

TupleDictionary.prototype = {
 tupleToString: function(tuple) {
  return tuple.join(",");
 },

 put: function(tuple, val) {
  this.dict[ this.tupleToString(tuple) ] = val;
 },

 get: function(tuple) {
  return this.dict[ this.tupleToString(tuple) ];
 }
};

var dict = new TupleDictionary();
dict.put( [1,2], "banana" );
alert( dict.get( [1,2] ) );

EcmaScript doesn't distinguish between indexing a property by name or by [], eg.

a.name

is literally equivalent to

a["name"]

The only difference is that numbers, etc are not valid syntax in a named property access

a.1
a.true

and so on are all invalid syntax.

Alas the reason all of these indexing mechanisms are the same is because in EcmaScript all property names are strings. eg.

a[1]

is effectively interpreted as

a[String(1)]

Which means in your example you do:

my_map[[a,b]] = c

Which becomes

my_map[String([a,b])] = c

Which is essentially the same as what your second example is doing (depending on implementation it may be faster however).

If you want true value-associative lookups you will need to implement it yourself on top of the js language, and you'll lose the nice [] style access :-(