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

问题描述

我正在开发一个浏览器扩展程序,并且有一组项目,必须映射到某些类别。

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 处理即可。

标签: javascriptjsondata-structures

解决方案


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

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

我建议只将项目保存在数据存储中的平面列表中(类似于 RDBMS 对数据库行所做的事情)。

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

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

推荐阅读