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

如何使用storage.sync.set在对象内追加对象且不覆盖原有数据?

是的,你必须先通过chrome.storage.sync.get获取现有数据,将新内容合并到原有对象后,再用set覆盖存储——因为Chrome的storage API不会自动深层合并对象,当你调用set时,指定键对应的整个值会被完全替换,而不是在内部追加属性。

你之前的代码之所以会覆盖数据,核心问题是每次调用set时,都是给presentations赋值一个只包含新子对象的全新对象,这直接替换了原来的presentations,自然会丢失旧数据。

修正后的代码示例

const presentationTitle = 'Test presentation 123';

// 获取现有存储中的关键数据(presentations 和 general)
chrome.storage.sync.get(['presentations', 'general'], (data) => {
  // 初始化 presentations 对象:如果不存在则设为空对象
  let presentations = data.presentations || {};

  // 检查当前标题未存在时,追加新的子对象
  if (!presentations[presentationTitle]) {
    presentations[presentationTitle] = {
      duration: '00:00:00'
    };
  }

  // 构造要存储的完整对象:保留原有设置,更新 presentations
  const updatedSettings = {
    ...data, // 保留原有 general 等其他设置
    presentations // 替换为合并后的新 presentations 对象
  };

  // 存入存储
  chrome.storage.sync.set(updatedSettings, () => {
    console.log('新演示数据已追加');
  });
});

补充说明

  • 使用展开运算符...data可以保留原有所有已存储的键(比如你的general配置),避免误删其他设置
  • 如果只需要维护presentations,也可以直接构造{ presentations }调用set,但要确保不会影响其他已存储的键
  • 也可以用Object.assign实现对象合并,效果和展开运算符一致:
    presentations = Object.assign({}, data.presentations, {
      [presentationTitle]: { duration: '00:00:00' }
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:35:19