2017-07-10 7 views
0

Was ist der beste Weg, um 2 String-Variablen als Schlüssel für eine Map zu verwenden?Javascript Objekt/Array als Schlüssel für Karte

const map = new Map(); 
map.set(['a', 'b'], 5); 
map.get(['a', 'b']); //undefined 

einen Verweis auf [v1, v2] erstellen und verwenden, dass als Schlüssel für meinen Fall ist keine Option.

Ist die einzige Option, die beiden Variablen mit einem Trennzeichen zu kombinieren? (wird unordentlich, wenn die String-Variablen möglicherweise das Trennzeichen enthalten können).

+0

Ich denke, Sie möchten zwei Karten erstellen a -> b -> 5 (in Ihrem Beispiel). Habe ich recht? – giubueno

+0

@Ori Dor und, Jonasw, die Reihenfolge kann von Bedeutung sein, da das Array wieder aufgebaut wird, und das OP möchte die Kombination als Schlüssel, also besser zu sortieren, bevor stringify –

+0

@ koushik Chatterjee hängt von der Usecase. Warum ist das unsere Sache? –

Antwort

0

Nest Mai die Karte:

var map=new Map(); 

function set(key1,key2,value){ 
    if(map.has(key1)){ 
    return map.get(key1).set(key2,value); 
    } 
    return map.set(key1,new Map([[key2,value]])); 
} 

function get(key1,key2){ 
if(map.has(key1)){ 
    return map.get(key1).get(key2); 
} 
return false; 
} 

set("a","b","value"); 
console.log(get("a","b")) 

Wenn Sie eine variable Länge des Schlüssels möchten, können Sie rekursiv Karten erstellen und eine Ausfahrt Begrenzer am Ende hinzufügen, wahrscheinlich ein Symbol:

var exit=Symbol("exit"); 
set("a",exit,"value"); 
set("a","b",exit,"value"); 
+0

Übrigens, danke für den Downvote;) Ich mag sie ... –

+0

Ziemlich ordentliche Lösung – H77

+0

@ H77 aber immer noch zwei Leute denken, dass es downvoteworthy:/ –

Verwandte Themen