链接2个javascript数组

时间:2012-01-28 18:10:07

标签: javascript arrays static-linking

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

频道对象示例:

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

用户对象示例:

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

脚本必须执行此类操作:

  1. 按渠道显示用户列表。
  2. 按用户显示频道列表。
  3. 所有基本操作(添加/删除/更新用户/频道);
  4. 在这些对象之间实现链接的更好方法是什么:

    1. 用户将包含他的频道列表。
    2. 频道将包含他的用户列表。
    3. 创建包含user = channel assosiations的单独对象。
    4. 或者你的变种......
    5. 我认为第三种变体会更好。

1 个答案:

答案 0 :(得分: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);
    }
}

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

此结构不会优化以了解哪些用户在给定频道中。如果您想要来自此数据结构的信息,您仍然可以计算它,但它将涉及查找每个用户对象以找出哪些用户在给定的通道中。这是可行的,但不是很快。

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

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