Javascript对象/数组作为Map的关键

时间:2017-07-10 10:22:19

标签: javascript ecmascript-6

使用2个字符串变量作为Map的键的最佳方法是什么?

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

创建对[v1, v2]的引用并将其用作密钥不适用于我的情况。

将两个变量与分隔符组合在一起的唯一选择是什么? (如果字符串变量可能包含分隔符,则会很混乱。)

1 个答案:

答案 0 :(得分:1)

可以嵌套地图:

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"))

如果你想要一个可变长度的键,你可以递归地创建地图并在末尾添加一个退出定界符,可能是一个符号:

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