IndexedDB:索引对象值
IndexedDB: Indexing object values?
我有一些关键字嵌套在不同深度的对象,我想将它们存储在索引中。关键字的格式如下:
{
"list": [
{
"keywords": ["hi", "bye"],
"rules": "contains 1 of the following"
},
{
"keywords": ["foo", "bar"],
"rules": "contains all of the following"
}
]
}
我想一次搜索所有关键字,然后循环通过匹配的"列表"找到相似之处。我想知道是否最好将所有关键字分别存储在另一个表中或循环遍历每个列表并每次使用新的正则表达式搜索关键字,请记住有数千个这些列表。
- indexedDB只支持整数值比较:(string1 == string2, string1>= string2, string1 <= string2)。你不能使用正则表达式搜索字符串,除非你计划将所有的单词列表以数组的形式加载到内存中并循环遍历列表。
- 您可以将值存储在数组中,作为您正在存储的每个对象的属性,然后在该属性上创建多条目索引。使用多条目标志的效果是获取数组并在索引中为数组的每个值创建一行。例如,如果您有对象
{prop1:value1,prop2:[value2,value3]}
,并且您在prop2上创建了一个索引,并且您对createIndex API方法使用了多条目标志,那么索引中将出现两行,一行用于value2,另一行用于value3。然后,您可以在该索引上打开游标并遍历其行,首先看到value2,然后看到value3(取决于顺序)。这将是您构建并加载到内存中的数组的源,然后分别在内存中使用您自己的正则表达式测试条件进行循环。 - 或者,您可以将单词作为单独的对象存储在单个存储中。每个物体看起来都像
{prop:word}
。然后,您可以在此存储上打开游标并遍历所有单词以在内存中构建相同的数组,然后使用正则表达式进行迭代和测试。 - 遍历内存中的值并执行测试正则表达式将会很慢。真的很慢。当你有更多的关键字时,它会变慢。但是你应该先试着使用它,因为它可能足够快,可以满足你的需求。
- 如果你真的想加快速度,你必须学习几个高级概念。例如,如果您愿意对能够应用于表的查询类型(正则表达式)施加约束,则可以考虑使用像trie这样的高级数据结构(或者查看jQuery的创建者John Resig撰写的文章)。使用tree与"如何"使用indexedDB无关。它是你自己在indexedDB上创建的东西。但如果你这样做了,你可能会查询trie数据结构非常快。
相关文章:
- 在JavaScript中通过索引从对象数组中获取值
- Javascript:根据对象的嵌套数组中的值,在数组中查找对象的索引
- “未定义的索引:itemdetails”,当将JSON对象从JavaScript发送到PHP时
- 在知道对象值的情况下,确定数组中JS对象的索引
- 索引IndexedDB中对象中的数组值
- 对象中的索引错误
- 按键查找数组中对象的索引
- 使用Handlebars获取同级JSON数据,其中单个对象没有父索引键,但多个项有一个索引键
- AngularJS - ng-repeat,更新尚未定义的模型对象索引
- 来自 jsp 和 javascript 中的请求属性的对象索引数组
- 使用变量作为对象索引
- 如何使用 JavaScript 获取对象索引值的 JSON 响应
- NamedNodeMap对象内部的Attr对象索引问题
- 使用json中的id查找对象索引
- JSON获取对象索引
- 生成对象而不是对象索引的Javascript for循环
- jQuery对象索引忽略jQuery.filter()
- 确定特定字符串的对象索引
- Angularjs访问对象索引
- 按字符串查找对象索引