gpt4 book ai didi

javascript - 如何在不重复自己的情况下获取或设置 JavaScript map

转载 作者:行者123 更新时间:2023-11-30 15:13:58 24 4
gpt4 key购买 nike

我有一个用例,我想从 Map 中获取一个项目。如果该项目不存在,我想插入一个初始值并保存以备后用。我还想使用 const 变量,这样我就不会不小心重新绑定(bind)本地。我知道我可以编写自己的助手,但在我看来,这种模式需要大量编写才能成为一种我希望很常见的模式:

const item = myMap.has(key) ? myMap.get(key) : myMap.set(key, initialize()).get(key);

或者避免紧跟在 .set() 之后的 .get():

const item = myMap.has(key) ? myMap.get(key) : (() => {const value = initialize(); myMap.set(key, value); return value})();

有没有更简单的方法从 Map 中获取一个项目到一个 const 变量中,如果它不存在,则为键插入一个初始值第一?

我知道 similar question exists ,但在那个问题中,插入后的项目不需要存储在本地,它使用 let 而不是 const

编辑:我已经使用效用函数路由并创建了 maputil .

最佳答案

我们可以曾经稍微减少它,分解出 .get(key) 部分:

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()));

...或者如果您可以在您的项目中扩展内置函数(这对某些项目没问题,对其他项目则不行):

Object.defineProperty(Map.prototype, "getOrAdd", {
value: function(key, initializer) {
if (this.has(key)) {
return this.get(key);
}
const value = initializer();
this.set(key, value);
return value;
}
});
const initialize = _ => 42;
const myMap = new Map();
const key = "answer";
const item = myMap.getOrAdd(key, initialize);
console.log(item);
console.log(Array.from(myMap.keys()));

关于javascript - 如何在不重复自己的情况下获取或设置 JavaScript map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44733732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com