Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
129
rated 0 times [  132] [ 3]  / answers: 1 / hits: 35288  / 15 Years ago, tue, september 15, 2009, 12:00:00

I have a situation where I want to create a mapping from a tuple to an integer. In python, I would simply use a tuple (a,b) as the key to a dictionary,


Does Javascript have tuples? I found that (a,b) in javascript as an expression just returns b (the last item). Apparently this is inherited from C.


So, as a workaround, I thought I can use arrays instead,


my_map[[a,b]] = c

I tried it at the Firebug console and it seemed to work. Is that a good way to do it?


Another alternative I thought of is to create a string out of the tuples


my_map[""+a+":"+b] = c

So the question is: is there any problem with any of these methods? Is there a better way?


EDIT:


Small clarification: in my case, a,b,c are all integers


More From » dictionary

 Answers
18

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 :-(


[#98697] Wednesday, September 9, 2009, 15 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
willieelisham

Total Points: 201
Total Questions: 108
Total Answers: 106

Location: Zambia
Member since Sat, Oct 31, 2020
4 Years ago
;