我正在尝试在我的 js 代码中创建对象集合,有两种看起来都很合乎逻辑的方法。我想知道是否有“最佳实践”,以及为什么。尽管这似乎是一个基本问题,但我找不到太多相关信息。
假设它们是颜色对象。色调值是虚构的。 $ 是 jQuery。
选项 1:标识符作为属性
我称之为“数据库方式”;每个对象看起来像一个表行,并包含属于该行的所有字段。
colors = [
{name: "red", hex: "ff0000", hue: 34},
{name: "blue", hex: "0000ff", hue: 100}
]
添加颜色:
colors.push({name: "purple", hex: "ff00ff", hue: 100});
通过指定名称获取颜色:
redObjs = $.grep(colors, function(c){return (c.name === "red");}); //array with 1 element //easier way?
hexOfRex = redObj[0].hex;
通过指定色调获取颜色名称:
hueObjs = $.grep(colors, function(c){return (c.hue === 100);}); //array with 2 elements (color objects)
hueNames = hueObjs.map(function(c){return c.name;}); //array with 2 elements (strings)
选项 2:标识符作为键
这里,部分信息(包括标识符)没有存储在颜色对象中。
colors = {
red: {hex: "ff0000", hue: 34},
blue: {hex: "0000ff", hue: 100}
}
添加颜色:
colors["purple"] = {hex: "ff00ff", hue: 100};
通过指定名称获取颜色:
redObj = colors["red"];
hexOfRed = redObj.hex //or directly colors["red"].hex;
通过指定色调获取颜色名称:
hueNames = []; for (c in colors) {if (colors[c].hue === 100) hueNames.push(c);} //array with 2 elements (strings)
我可以想到每个的一些(缺点)优点,例如 选项 1 的优点:一致性和数据库相似性。数组(而不是对象)似乎是存储如此相似的对象的更自然的结构。 选项 2 的优点:检索信息容易且快捷,至少,如果名称已知的话。不可能出现重复的颜色名称。
但这并不能真正帮助我选择。还有其他论据需要考虑吗?一种做法是“错误的”还是被认为是不好的做法,为什么?如果我总是拥有颜色名称并且永远不需要查找它,这是否重要(这似乎是选项 2 的主要问题)。
谢谢大家!
最佳答案
这取决于您拥有的数据大小以及您想要的性能类型。 在大多数情况下,第二次优化甚至无关紧要,除非您的数据行开始达到数千或更多。 尝试使用 jsperf.com 对这两种情况进行基准测试,并使用大小完全符合您需要的示例数据集。 如果性能几乎相同,请使用更清晰的数据格式。
关于javascript - 如何在javascript中存储类似的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24952759/