const
变量,以便我不能意外地重新定位本地。我知道我可以写自己的助手,但是在我看来,这种模式需要很多写作,我希望这很普遍:
const item = myMap.has(key) ? myMap.get(key) : myMap.set(key, initialize()).get(key);
或避免立即在
.get()
::
之后
.set()
有一种更简单的方法将项目从
const item = myMap.has(key) ? myMap.get(key) : (() => {const value = initialize(); myMap.set(key, value); return value})();
变量中获取,如果尚不存在,请先插入键的初始值?
我知道存在一个类似的问题,但是在这个问题中,没有要求将插入的项目存储在插入后的本地中,并且使用Map
而不是
const
.。
Edit:我走了实用程序路线,并创建了maputil.。
我们可以稍微减少它,从而分解了
let
部分:
.get(key)
是的,可能是实用程序功能的候选人。 :-)
standalOne:
const item = (myMap.has(key) ? myMap : myMap.set(key, initialize())).get(key);
...或者如果您可以在项目中扩展内置(对于某些项目而不是其他项目都可以):
const initialize = _ => 42;
const myMap = new Map();
const key = "answer";
const item = (myMap.has(key) ? myMap : myMap.set(key, initialize())).get(key);
console.log(item);
console.log(Array.from(myMap.keys()));
我最喜欢的模式是:
const getOrAdd = (map, key, initializer) => {
if (map.has(key)) {
return map.get(key);
}
const value = initializer();
map.set(key, value);
return value;
};
const initialize = _ => 42;
const myMap = new Map();
const key = "answer";
const item = getOrAdd(myMap, key, initialize);
console.log(item);
console.log(Array.from(myMap.keys()));