javascript - 如何在javascript中存储类似的对象

标签 javascript jquery arrays object

我正在尝试在我的 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/

相关文章:

javascript - 谷歌可视化数据表仪表板中的总和列

jquery - 使用 AJAX JQuery 和 ASP.Net 与母版页提交表单

javascript - Node.js forEach : cannot read property '[object Array]' of undefined

javascript - 计算 1 个数组中元素的笛卡尔积

javascript - 将数据从一张纸过滤到另一张纸

javascript - 正则表达式中的 test() 函数

javascript - 在动态表javascript中显示对象数组

javascript - JS YouTube 嵌入交换在不同的 iOS 版本上不一致

javascript - 如何在 setTimeout 完成时执行函数?

jquery - CSS 动画 : Fade in + transform animation for each word not working