javascript - 数组键路径上的索引找不到任何值

标签 javascript indexeddb firefox-addon-webextensions

我想熟悉 indexedDB 来构建我的 Firefox WebExtension。

我的示例数据的结构如下:

const sampleDataRaw = [ 
      {
      "ent_seq" : 1413190,
      "att1" : [ {
        "sub11" : "content1",
        "sub12" : [ "word" ]
      }, {
        "sub11" : "content2"
      } ],
      "att2" : [ {
        "sub21" : "other content",
        "sub22" : [ "term" ]
      } ]
    }, {
      "ent_seq" : 1000010,
      "att2" : [ {
        "sub21" : "more content"
      }, {
        "sub22" : "more words"
      } ]
    }
    ] // end sampleRawData

我已经打开/创建了数据库,添加了示例数据并使用 objectStore.get() 和 objectStore.openCursor() 通过 ent_seq 键进行查询。

当我想使用我应该为这些字段创建的索引来搜索 sub11 或 sub21 字段时,就会出现问题:

objectStore.createIndex("sub11Elements", "att1.sub11", { unique: false });
objectStore.createIndex("sub21Elements", "att2.sub21", { unique: false });

当我想搜索字段 sub11 时,如下所示:

var index = objectStore.index("sub11Elements");
index.get("content1").onsuccess = function(event) {
        // I should have the first object of my data now, alas the result is undefined instead
     };

它确实成功了,但是返回的值是未定义的,因为 get() 实际上没有找到任何东西。

我想知道为什么它找不到该条目以及如何让它找到它。我想这可能是因为键路径错误,但如上所述,如果我改为搜索键(ent_seq)我可以成功获取result.att1[i].sub11值。

在 mozilla 的网站上,据说键可以是字符串和数组(或数组中的数组等)类型,并且键路径部分应该使用点连接。 通过在 stackexchange 上搜索,我到目前为止发现 key 路径中不可能有变量键,但无论如何都不应该是这样。
因此,我真的不明白是什么导致搜索找不到数据库内的对象。

最佳答案

  1. 看起来第二级对象是数组,而不是第一级对象的属性。 . 访问器访问子属性,而不是数组的索引。
  2. IDBObjectStore.prototype.get 在没有错误的情况下始终会成功,并且不指示是否找到匹配项。

关于第 1 点的更多内容。请查看 "att1":[{"sub11": "content1","sub12": [ "word"]}...。假设这是一个实际的基本 JavaScript 对象。您可以使用att1.sub11吗?不会。因为 att1 的值是一个数组,而不是一个对象。

关于javascript - 数组键路径上的索引找不到任何值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47222045/

相关文章:

javascript - 如何区分 JS 不透明对象?

firefox-addon - 我是否需要创建 .xpi 文件来测试我的 Firefox 扩展?

javascript - 单击按钮时 MongoDB 更新

javascript - 新窗口大小

javascript - 为什么 Array.prototype.includes.bind 行为异常?

performance - IndexedDB 访问速度和效率

javascript - 如何在单击按钮时获取div的坐标

javascript - Indexeddb 中止错误

javascript - 在webpack中捕获 "this"值

javascript - 类型错误 : [API] is undefined in content script or Why can't I do this in a content script?