获取或设置 Javascript ES6 映射中的元素?

art*_*.sw 5 javascript dictionary find addition

是否可以在 Javascript Map中一步查找或添加元素?

我想一步完成以下操作(以避免两次寻找密钥的正确位置):

// get the value if the key exists, set a default value otherwise
let aValue = aMap.get(aKey)
if(aValue == null) {
    aMap.set(aKey, aDefaultValue)
}
Run Code Online (Sandbox Code Playgroud)

相反,我只想搜索一次密钥。

在 C++ 中,可以使用std::map::insert()std::map::lower_bound()

在 JavaScript 中,代码可能如下所示:

let iterator = aMap.getPosition(aKey)
let aValue = aMap.getValue(iterator)
if(aValue == null)
{
    aMap.setWithHint(aKey, aValue, iterator)
}
Run Code Online (Sandbox Code Playgroud)

或者

let aValue = aMap.getOrSet(aKey, aDefaultValue) 
Run Code Online (Sandbox Code Playgroud)

我认为这是不可能的,但我想确保我是正确的。我也有兴趣知道为什么这是不可能的,尽管它是一个重要的功能。

Mat*_*tW. 4

无论如何,查找都必须发生,如果您避免它也没有多大关系,至少在引擎进一步优化之前是这样。

但这Map.has是一个更好的解决方案,并且应该比Map.get(). 例如:

myMap.has(myKey) ? true : myMap.set(myKey, myValue)

性能在这个级别上应该是无关紧要的,除非你是谷歌规模的。但如果这是一个严重的瓶颈,在可预见的未来,数组仍然应该比 Map/Set 更快。