Ser*_*lov 5 javascript dictionary functional-programming immutability
我正在我的 JS 项目中以函数式方式工作。
这也意味着我不会变异object
或array
实体。相反,我总是创建一个新实例并替换旧实例。
例如
let obj = {a: 'aa', b: 'bb'}
obj = {...obj, b: 'some_new_value'}
Run Code Online (Sandbox Code Playgroud)
问题是:
如何使用 javascript 地图以功能性(不可变)方式工作?
我想我可以使用以下代码来添加值:
let map = new Map()
...
map = new Map(map).set(something)
Run Code Online (Sandbox Code Playgroud)
但是删除项目呢?
我不能这样做new Map(map).delete(something)
,因为 的结果.delete
是一个布尔值。
PS我知道 ImmutableJS 的存在,但我不想使用它,因为你永远不能 100% 确定你现在使用的是普通 JS 对象还是 immutablejs 对象(尤其是嵌套结构)。顺便说一句,因为 TypeScript 的支持不好。
我无法执行 new Map(map).delete(something); ,因为 .delete 的结果是布尔值。
您可以使用间隙变量。如果您愿意,可以将其外包给一个函数:
function map_delete(old_map, key_to_delete) {
const new_map = new Map(old_map);
new_map.delete(key_to_delete);
return new_map;
}
Run Code Online (Sandbox Code Playgroud)
或者您可以创建获取地图中的条目,过滤它们并根据结果创建一个新条目:
const new_map = new Map( Array.from(old_map.entries).filter( ([key, value]) => key !== something ) );
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1569 次 |
最近记录: |