当大多数键具有相同的值时,在文件中构造数据的最佳方法是什么?

时间:2019-07-18 07:27:27

标签: javascript json data-structures

我正在使用浏览器扩展,并且有一组项目,这些项目必须映射到某些类别。

item-1: category-1
item-2: category-1
item-3: category-2
item-4: category-2
...

项目到类别的映射保存在文本文件(json)中,但是当扩展运行时,我只需要所有项目/类别对中约60个项目的子集。作为键,我有一个项目列表,我需要在文件中搜索它们的类别。文件中有大约200个项目和5个类别。

将所有项目保存为键,将类别保存为值会产生很多冗余。因此,我想到了将类别用作键,将项目用作值,例如:

category-1:
  item-1,
  item-2
category-2,
  item-3,
  item-4
...

但是像这样,我必须遍历所有类别以搜索我要寻找的值,这不是理想的解决方案。

我该如何以一种结构化数据的方式来确保冗余最少并且数据处理要尽可能快?还是有比遍历所有类别更好的方法来读取第二个示例中的数据?

其他可以存储数据的格式也可以,只要可以用JavaScript处理即可。

1 个答案:

答案 0 :(得分:1)

  

大约有200个项目和5个类别。

以这种规模,您根本不必考虑这一点,除非您要在烤面包机上运行您的应用程序。

我建议只将项目保留在数据存储区的平面列表中(类似于RDBMS对数据库行的处理)。

如果您需要一个类别中的所有项目,请使用.filter(item => item.category === something)或类似的项目;如果您真的很喜欢,可以在加载数据(或更改数据)时预先缓存该映射,例如

const byCategory = {};
items.forEach(item =>
  (byCategory[item.category] =
    byCategory[item.category] || []).push(item)
);