使用localforage中的JSON,更新属性值的有效方法(Binarysearch等)?

时间:2018-08-03 08:05:16

标签: javascript json local-storage

我想直截了当地向您展示我的示例数据,该数据大约来自.csv文件中的180.000行,因此很多行。我正在使用papaparse阅读.csv。然后,我将数据保存为对象数组,如下所示: enter image description here

我只是用这张图片,因为您还可以看到我的对象具有或应该具有的所有属性。数据来自Media Transperency Data,后者是开放源代码,并显示机构之间的付款。

通过使用localforage技术保存对象数组,该技术基本上是IndexedDB或具有本地存储(如API)的WebSQL。因此,我永远不会在服务器上保存数据!仅在客户端!

问题: 所以我的问题是,用户可以在客户端界面中添加sourceHash和/或targetHash属性。因此,例如,假设用户加载了“ Energie Steiermark Kunden GmbH”对象,现在将sourceHash-“ company”添加到该对象。所以基本上是一个标签。这已经在客户端中反映出来并显示出来,但是我也需要在localforage中得到它,并因此重写对象的初始数组。因此,我需要在我的180.000行巨大数组中搜索名称为“ Energie Steiermark Kunden GmbH”的每个对象,因为可以有多个对象,并将属性sourceHash设置为“ company”。然后再次将其保存在localforage中。

第一个问题是如何最有效地做到这一点?我可以使用以下方法从localforage中获取数据并分别进行设置。

获取:

localforage.getItem('data').then((value) => { ... });

设置:

localforage.setItem('data', dataObject);

但是,问题是我如何最有效地做到这一点?我的意思是,例如,如果sourceNode仅以“ E”开头,则无需搜索所有sourceNodetargetNode当然也是一样。

先谢谢您!

更新: 感谢您的回答!以及您将如何用Java最有效的方式做到这一点?我的意思是有可能做到这一点。例如,假设我们拥有当前的sourceHash“公司”,并希望将其分配给所有timeNode上以“ Energie Steiermark Kunden GmbH”开头的每个节点。可能是20151、20152、20153、20154等...

1 个答案:

答案 0 :(得分:0)

Localforage只是实际存储引擎上的localStorage / sessionStorage式包装,因此它仅为您提供localStorage的键值功能。简而言之,对于任意查询,没有更有效的方法。

这听起来更像是IndexedDB的情况,因为您可以在数据上定义搜索索引,例如sourceNode,并以此方式进行更有效的查询。