在Javascript ES6 Map中获取或设置元素
Get or set element in a Javascript ES6 Map?
是否可以在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)
}
相反,我只想搜索一次密钥。
在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)
}
或
let aValue = aMap.getOrSet(aKey, aDefaultValue)
我想这是不可能的,但我想确保我是正确的。此外,我很想知道为什么这是一个重要的功能,却不可能。
无论如何都必须进行查找,如果你避免它也没什么关系,至少在引擎得到更多优化之前是这样。
但Map.has
是一个更好的解决方案,应该比Map.get()
快一点。例如:
myMap.has(myKey) ? true : myMap.set(myKey, myValue)
在这个级别上,性能应该是无关紧要的,除非你是谷歌级别的。但是,如果这是一个严重的瓶颈,在可预见的未来,Array仍然应该比Map/Set更快。
我个人最终将Map更改为一个简单的Object。这允许写一个reduce(将条目分组到集合映射中),如下所示:
.reduce((a, [k, v]) => (a[k] = a[k] || new Set()).add(v) ? a : a, {})
有了Map,它应该变成
.reduce((a, [k, v]) => (a.has(k) ? a : a.set(k, new Set())).get(k).add(v) ? a : a, new Map())
对于这个目的来说,这感觉有点太麻烦了。
我同意,如果得到支持,这样的东西将是理想的:
.reduce((a, [k, v]) => a.getOrSet(k, new Set()).add(v) ? a : a, new Map())
相关文章:
- 如何提供在javascript中编写对对象的重复访问以设置元素样式的简写
- 一个页面上有多个Ace编辑器,没有预先设置元素
- Android浏览器设置元素大小太小
- 是否可以使用flexbox显示模型设置元素的滚动位置
- 在Javascript ES6 Map中获取或设置元素
- 如何使用javascript设置元素旋转和动态观察的动画
- 使用输入变量设置元素的值
- 如何设置元素的z索引?JQuery、Javascript、CSS、HTML
- Javascript链接-试图设置元素值-奇怪的行为chrome&安卓
- DOM:如何根据迭代器值设置元素宽度并在mouseover上调用函数
- 如何获取变量's设置元素时的文字值's onclick处理程序
- 如何设置元素的占位符文本 我无法编辑 HTML 并且 ID 正在更改
- 设置元素动画jquery
- 缩放时设置元素的重力
- 选择一个 CSS 选择器来动态设置元素的样式 ::before
- 使用循环和闭包设置元素的内部 HTML
- 使用 Javascript 获取和设置元素的宽度
- 设置元素 id = javascript 函数
- 铬:设置元素高度的脚本是什么
- 取消设置元素可见性,更改 innerHTML,然后转换回来