一尘不染

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

javascript

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

(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'}
};

如果您要存储(或希望可能拥有)多个“价值”部分(例如,增加他们的年龄等),显然第二或第三种选择是可行的,因此,为了论证,让我们假设在此结构中再也不需要任何数据值了。您选择哪一个,为什么?


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


阅读 358

收藏
2020-05-01

共1个答案

一尘不染

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

我认为,如果您要定义一对一的关系(例如简单的映射),则第一种解决方案是好的,尤其是当您需要使用该键作为查找键时。

一般而言,第二种解决方案对我来说是最健壮的,如果不需要快速查找键,我可能会使用它:

  • 它是自描述的,因此您不必依赖任何使用 人员的人 就知道密钥是用户的ID。
  • 每个对象都是独立的,这更适合将数据传递到其他地方-而不是您随便传递两个参数(id和name)。
  • 这是一个罕见的问题,但是有时键值可能无效,无法用作键。例如,我曾经想映射字符串转换(例如,“:”到“>”),但是由于“:”不是有效的变量名,因此我不得不使用第二种方法。
  • 它很容易扩展,以防万一您需要向某些(或全部)用户添加更多数据。(对不起,我知道您的“为了辩论而已”,但这是一个重要方面。)

如果您需要快速的查找时间+上面列出的一些优点(传递数据,自我描述),那么第三种方法将是不错的选择。但是,如果您不需要快速的查找时间,则麻烦得多。同样,无论哪种方式,如果对象中的id与
people中 的id有所不同,都将有出错的风险。

2020-05-01