javascript - Javascript 中的对象与数组的键/值对

标签 javascript data-structures

假设您有一个非常简单的数据结构:

(personId, name)

...并且您想将其中的一些存储在 javascript 变量中。在我看来,您有三个选择:

// a single object
var people = {
    1 : 'Joe',
    3 : 'Sam',
    8 : 'Eve'
};

// or, an array of objects
var people = [
    { id: 1, name: 'Joe'},
    { id: 3, name: 'Sam'},
    { id: 8, name: 'Eve'}
];

// or, a combination of the two
var people = {
    1 : { id: 1, name: 'Joe'},
    3 : { id: 3, name: 'Sam'},
    8 : { id: 8, name: 'Eve'}
};

如果您有(或期望您可能有)多个“值(value)”部分要存储(例如,添加他们的年龄或其他东西),那么第二个或第三个选项显然是可行的方法,所以,为了争论的焦点,让我们假设这个结构中永远不会需要更多的数据值。你选择哪一个?为什么?


编辑:该示例现在显示了最常见的情况:非顺序 ID。

最佳答案

每个解决方案都有其用例。

如果您尝试定义一对一关系(例如简单映射),我认为第一个解决方案很好,尤其是当您需要将键用作查找键时。

总的来说,第二种解决方案对我来说是最可靠的,如果我不需要快速查找 key ,我可能会使用它:

  • 它是 self 描述的,所以你不需要 必须依赖于任何人使用 人们知道 key 是用户的 ID。
  • 每个对象都是独立的, 哪个更适合传递数据 其他地方 - 而不是两个参数 (id 和 name) 你只是路过 人。
  • 这是一个罕见的问题,但有时 键值可能无效 用作键。比如我有一次 想要映射字符串转换 (例如,“:”到“>”),但由于“:” 不是我必须的有效变量名 使用第二种方法。
  • 它很容易扩展,以防万一 沿线的某个地方你需要 向部分(或全部)用户添加更多数据。 (对不起,我知道你的“为了 争论的缘故”,但这是一个 重要的方面。)

如果您需要快速查找时间 + 上面列出的一些优点(传递数据, self 描述),第三种方法会很好。但是,如果您不需要快速查找时间,那就麻烦了很多。此外,无论哪种方式,如果对象中的 id 与people 中的 id 有所不同,您就有出错的风险。

关于javascript - Javascript 中的对象与数组的键/值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/688097/

相关文章:

java - 如何在 Java 中创建自己的 HashMap?

javascript - Node.js xml 到 json 对象

javascript - Backbone、Marionette、Grunt、 Jasmine 测试

javascript - 在 View 上 react native 半椭圆

javascript - 向现有值添加一个值

javascript - getStaticProps 中的下一个 Js 上下文参数返回 "{ locales: undefined, locale: undefined, defaultLocale: undefined }"

javascript - 如何在 JavaScript 中建模这个数据结构? (AngularJS)

algorithm - 序列的数据结构

algorithm - 使用不确定性来检测派系?

java - loadClass((“完全合格的类名称”)和<ClassName> .class.getDeclaredConstructors之间有什么区别