【问题标题】:Linking 2 javascript arrays链接 2 个 javascript 数组
【发布时间】:2012-01-28 18:10:07
【问题描述】:

我有 2 个对象数组:用户和频道。每个用户可以在多个频道中。每个频道可以包含许多用户。

通道对象示例:

{name: "test", visible: true, active: true}

用户对象示例:

{name: "user", ip: '127.0.0.1', sex: 1}

脚本必须执行这样的操作:

  1. 按频道显示用户列表。
  2. 按用户显示频道列表。
  3. 所有基本操作(添加/删除/更新用户/频道);

在这些对象之间实现链接的更好方法是什么:

  1. 用户将包含他的频道列表。
  2. 频道将包含他的用户列表。
  3. 创建包含 user=channel 关联的单独对象。
  4. 或者你的变种...

我认为第三种变体会更好。

【问题讨论】:

  • 请显示您当前数据的格式,以便我们提供更具体的建议。
  • 比如什么是频道。它只是一个数字吗?它是一个具有多个属性的对象吗?是字符串吗?
  • @jfriend00 正如我所写 - 它们是对象数组。我已将它们的结构添加到问题中。
  • 您可以同时使用 1 和 2,然后让添加/删除操作从两个列表中添加/删除。

标签: javascript arrays static-linking


【解决方案1】:

如您所知,有很多方法可以做到这一点,最终哪种方法更多地取决于您将如何使用、访问和存储数据,而不是您向我们披露的数据。但是,这是一种可行的方法:

为用户创建一个对象:

function user(name, id, ip, sex, channels) {
    this.name = name;
    this.id = id;
    this.channels = channels || [];
    this.ip = ip;
    this.sex = sex;

    this.addChannel = function(channel) {
        this.channels.push(channel);
    }
}

然后,您可以拥有一个用户对象数组,其中每个用户对象包含有关用户的基本信息并包含频道列表。这种数据结构选择经过优化,可以轻松了解用户所属的频道。

此结构并未针对知道哪些用户在给定频道中进行优化。如果你想从这个数据结构中得到这些信息,你仍然可以计算它,但它需要查看每个用户对象以找出哪些用户在给定的频道中。这是可行的,但不是很快。

如果您需要快速获取两种类型的信息(用户所在的频道和频道中的用户),那么您可能需要双重维护两种数据结构,一个可以为您提供每个答案的数据结构。如果您通过方法或辅助函数对通道进行所有操作,那么它们都可以自动维护。

选择最终取决于您最需要如何访问数据以及哪些类型的访问必须快速。由于您尚未分享该信息,我们无法确定哪个更好。

【讨论】:

  • 将方法附加到原型上会更明智。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 2015-04-16
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多