JavaScript对象/数组作为Map的键

3

如何最好地使用两个字符串变量作为Map的键?

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

在我的情况下,创建一个对 [v1,v2] 的引用并将其用作键不是选项。

那么唯一的选择是使用分隔符将这两个变量组合起来吗?(如果字符串变量可能包含分隔符字符,则会混乱)


我认为你想要创建两个映射 a -> b -> 5(在你的例子中)。我是对的吗? - giubueno
@Ori Dor和Jonasw,顺序可能很重要,因为数组将被重新构建,而且OP希望将组合作为键,所以最好在stringify之前进行排序。 - Koushik Chatterjee
@Jonasw 可能是,序列也可以是密钥的一部分,因此完全取决于使用情况。 :) - Koushik Chatterjee
1个回答

4

可以嵌套Map:

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

如果您需要可变长度的键,可以递归创建 Maps 并在末尾添加一个退出分隔符,通常是一个符号:exit delimiter
var exit=Symbol("exit");
set("a",exit,"value");
set("a","b",exit,"value");

相当不错的解决方案。 - H77

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接