You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用immutability-helper:多次$set还是单次$merge修改字典更优?

推荐方案:优先使用单次$merge操作

针对你提到的两种方案,更推荐第二种先构建修改对象再执行单次$merge的方式,原因如下:

  • 性能更高效:immutability-helper每次执行更新操作(比如$set)都会生成全新的不可变对象。如果在循环里多次调用$set,会反复创建中间状态对象,当待处理条目数量较多时,额外的内存开销和对象创建成本会被放大。而先集中构建好所有要修改的条目,再通过一次$merge完成更新,只会生成一次最终的新对象,性能表现更优。
  • 代码更易维护:把构建修改内容的逻辑和最终的更新操作分离,避免循环里嵌套immutability-helper的调用,代码结构更清晰,后续修改或扩展逻辑也更方便。

具体实现示例(TypeScript)

import update from 'immutability-helper';

// 假设这是你需要批量更新的节点可见性列表
const pendingUpdates: INodeVisibility[] = [
  { id: 'node_001', level: 1, isExpanded: true },
  { id: 'node_002', level: 2, isExpanded: false },
  // 更多待更新条目...
];

// 先构建要合并的修改对象
const mergePayload: NodeVisibilityDict = {};
pendingUpdates.forEach(node => {
  mergePayload[node.id] = node;
});

// 执行单次$merge更新原状态
const updatedState = update(originalState, {
  nodeVisibilityDict: {
    $merge: mergePayload
  }
});

由于你的数据已经规范化,INodeVisibility不会出现额外属性,直接将条目赋值到mergePayload中完全安全,不用担心意外的属性污染问题。

内容的提问来源于stack exchange,提问作者Sammybar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:34:52