我正在将数据作为对象扩展存储在同步存储中。有时我需要直接访问我的树的一个“叶子”,有时我需要整个数据。看起来像这样:
{
someNode: ...,
otherNode: { ... },
exclusions: {
'someName': [
item1Constant,
item5Constant,
],
'someOtherName': [ ... ]
}
}
如何在不使用整个排除树的情况下更改someName下的常量数组?将所有“ someName”节点放在顶层而不使用排除包装程序似乎不是一个好的解决方案,因为在该级别也有其他数据。
以下更新仅是someName
,还是会替换所有exclusions
?
chrome.storage.sync.set({ 'exclusions' : { [someNameVar] : [...] } }, () => { ... });
该替代方案是什么-它会在排除文档上创建一个新节点,还是在顶层创建一个新节点,并在其名称中添加一个点?
chrome.storage.sync.set({ ['exclusions.' + [someNameVar]] : [...] } }, () => { ... });
如何才能一次访问someName
数据?我知道在顶层只能指定一个属性,但我不知道什么仅对“子节点”有效:
chrome.storage.sync.get(['exclusions'], (result) => { ... });
在这里我会期望对象表示法吗?我的怀疑是,没有
chrome.storage.sync.get({ 'exclusions' : { 'someNameVar' } }, () => { ... });
或
chrome.storage.sync.get(['exclusion.someNameVar'], () => { ... });
排除对象可能会变大,因此我不想使用完整的数据(Chrome对邮件大小有限制)
答案 0 :(得分:1)
感谢wOxxOm提供的以下几点:
并且由于here确认我无法获得所有带有前缀的键(不加载整个文档),因此似乎唯一可行的解决方案是执行以下操作:
{
someNode: ...,
otherNode: { ... },
exclusions: [
'someName',
'someOtherName'
],
'someName': [
item1Constant,
item5Constant,
],
'someOtherName': [ ... ]
}
这意味着分两个步骤执行操作并复制一些数据,但是它允许直接编辑每个项目(someName / someOtherName等),同时仍允许检索所有排除数据而无需加载不相关的项目(otherNode等)。
注意:同步存储空间最多仍可限制512个项目。因此,您可以创建多少个“排除键”是有限制的